当我运行以下代码时,我的代码存在一些问题。
预期结果:
['test0,'test1','test2']
实际结果:
['test3','test3','test3']
代码:
var overall = [];
for(var a=0;a<3;a++){
var test_promise = new Promise(function(resolve,reject){
setTimeout(()=>{
console.log("looping: " + a);
resolve('test' + a);
},3000);
});
overall.push(test_promise);
}
Promise.all(overall).then(function(value){
console.log(value);
});
最佳答案
要解决这个问题,您应该将 for 循环中的 var 更改为 let (闭包问题)
for(let a=0;a<3;a++)
上面的结果是因为,var 全局定义变量,或者在整个函数中局部定义变量,而不管 block 作用域如何。
let allows you to declare variables that are limited in scope to the block, statement, or expression on which it is used. This is unlike the var keyword, which defines a variable globally, or locally to an entire function regardless of block scope.
例如
for(var i = 1; i <= 5; i++) {
setTimeout(function() {
console.log('Value of i : ' + i);
},100);
}
上述代码的期望输出是
Value of i : 1
Value of i : 2
Value of i : 3
Value of i : 4
Value of i : 5
但是实际输出是
Value of i : 6
Value of i : 6
Value of i : 6
Value of i : 6
Value of i : 6
上面的结果是因为,var 全局定义变量,或者在整个函数中局部定义变量,而不管 block 作用域如何。
for(let i = 1; i <= 5; i++) {
setTimeout(function(){
console.log('Value of i : ' + i);
},100);
}
Output:
Value of i : 1
Value of i : 2
Value of i : 3
Value of i : 4
Value of i : 5
在您的情况下,您的代码将是:
for(let a=0;a<3;a++){
var test_promise = new Promise(function(resolve,reject){
setTimeout(()=>{
console.log("looping: " + a);
resolve('test' + a);
},3000);
});
overall.push(test_promise);
}
关于javascript - 如何通过循环将解析推送到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664401/