Express的循环内异步函数问题

保证函数的index取值正确的方法

带有for的循环

  • 包括for循环,for in循环,for of循环,如果循环内容是异步,或者在循环结束后才调用,会导致永远读取到最后一个index值,此时的解决方案有如下三种
    1. 使用let代替var,如for(let i of arr){}
    2. 使用this,index=index,如
    for (var i = 0; i < oLi.length; i++) { 
      oLi[i].index = i;
      oLi[i].onmouseover = function() { 
          show(this.index); 
      } 
  }
  1. 使用闭包函数传入index值

forEach循环

  • arr.forEach(function(value,index,array){
    此时的value和index等同于let下的for循环,具有局部作用域
    })

判断是否全部异步已经执行完成的方法

  1. 每次异步回调一次事件发送,每次监听到该事件判断一次获取的数组长度是否达标,达标则已执行完成
  2. 设置计时器,不断获取数组长度并判断是否达标,达标则已执行完成
  • 但是以上方法都无法保证最后获取的数组内容顺序,因此
  1. 采用递归直到满足要求

你可能感兴趣的:(Express的循环内异步函数问题)