Чтобы исправить это, вы должны изменить var на let in for loop (проблема замыкания)
for(let a=0;a<3;a++)
Результат выше, потому что var определяет переменнуюглобально или локально для всей функции независимо от области видимости блока.
let позволяет объявлять переменные, ограниченные по области действия блоком, оператором или выражением, в котором она используется.Это не похоже на ключевое слово var, которое определяет переменную глобально или локально для всей функции независимо от области видимости блока.
, например,
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 определяет переменную глобально или локальнодля всей функции независимо от объема блока.
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);
}