gpt4 book ai didi

javascript - 如何按值传递到 javascript Promise

转载 作者:行者123 更新时间:2023-11-30 14:18:15 26 4
gpt4 key购买 nike

我不明白这个 javascript 程序的行为。我的意图是按顺序获取三个编号的资源,但似乎“i”已在闭包中被捕获,并且只使用了它的最终值。

function fetch(x) {
console.log('fetching resource ' + x);
}

var prom = Promise.resolve();
for(var i=1; i<=3; i++) {
prom = prom.then(() => { fetch(i);} );
}

//prints
//fetching resource 4
//fetching resource 4
//fetching resource 4

我对 js 的了解还不足以解决这个问题——我该如何修改这个程序来生成 1、2 和 3?我需要在某处使用 resolve() 吗?

更新:有人指出这个问题与 JavaScript closure inside loops – simple practical example 重复,这在技术上是正确的,但我认为这个问题是有值(value)的,因为它在 Promises 的世界中有新的应用。从技术上讲,上述问题确实正确回答了这里提出的问题,因为这个问题中的 Promise 元素原来是一个与答案无关的转移注意力的问题。但是,认识到 Promise 是无关紧要的是通过阅读这个问题而不是上述重复问题获得的洞察力。

最佳答案

var 更改为 let

function fetch(x) {
console.log('fetching resource ' + x);
}

var prom = Promise.resolve();
for(let i=1; i<=3; i++) {
prom = prom.then(() => { fetch(i);} );
}

或者为相同的创建一个 IIFE

function fetch(x) {
console.log('fetching resource ' + x);
}

var prom = Promise.resolve();
for(var i=1; i<=3; i++) {
prom = (function(i){ return prom.then(() => { fetch(i);} );})(i);
}

关于javascript - 如何按值传递到 javascript Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53183268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com