解决for循环中写异步函数,异步函数中输出下标一样问题
for循环中嵌套异步函数
for (let i=0; i<5; i++) { setTimeout(()=>{ console.log(i);// 5 5 5 5 5 }) }
解决上述问题
一、使用闭包
for(var i=0; i<5; i++) { (function(j){ // 异步操作 setTimeout(function(){ console.log(j) },1000); })(i); }
二、使用递归
function box7(param) { if (param < 5) { console.log("index is :", param); setTimeout(function() { box7(param + 1); }, 1000) } } box7(0);
三、使用let定义i
四、使用async、await
var asyncFunc = function(arr, i) { return new Promise(function(resolve, reject) { setTimeout(function() { arr.push(i); console.log("下标是: ", i); // 0 1 2 3 4 5 resolve(); }, 1000); }); } var box5 = async function() { var arr = []; for (var i = 0; i < 5; i++) { await asyncFunc(arr, i); } console.log(arr); } box5();