解决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();
原文地址:https://www.cnblogs.com/huxiuxiu/p/14919761.html