【问题标题】:Async Function in loop - make variable available in inner function [duplicate]循环中的异步函数-使变量在内部函数中可用[重复]
【发布时间】:2017-12-22 00:08:12
【问题描述】:

我正在尝试在循环中进行异步调用,使用返回的结果并使变量 'q' 可用于内部函数。

如何使 q 可用于内部函数(与异步调用之前的值相同)?

var oController = this;
for (var q = 0; q < dataArray.length; q++) {
  var InspectionNo = dataArray[q].inspectionNo;

  //async call
  oController._validateInspection(InspectionNo)

    //returns flag
    .then(function(flag) {
      debugger;
      if (flag) {
        //q is not defined here
        oController._doSomething(q)
      }
    });
}

【问题讨论】:

  • q 被定义,其值为dataArray.length
  • @Pointy 感谢您的回复,我可能需要重新措辞 - 我在调用异步调用时正在寻找 q
  • 使用let 而不是var
  • @neeko 用 (flag) => { 替换这个 function(flag){ 可能会解决问题。
  • @FahadNisar 箭头函数保留 this 上下文,但不保留循环中的变量。正如@Erazihel 所提到的,将var 替换为let 是可行的方法。

标签: javascript loops promise


【解决方案1】:

试试这样的:

var oController = this;
for (var q = 0; q < dataArray.length; q++) {
            var InspectionNo = dataArray[q].inspectionNo;

            //async call
            Promise.all([oController._validateInspection(InspectionNo), q])

            //returns flag
            .then(function([flag, q]){
                    if(flag){
                        //q is not defined here
                        oController._doSomething(q)
                    }
                });
        }

【讨论】:

  • 谢谢!这就是我要找的东西!
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 2022-01-26
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多