Javascript在返回响应之前等待承诺在for循环内部完成

Javascript在返回响应之前等待承诺在for循环内部完成,javascript,for-loop,promise,return,Javascript,For Loop,Promise,Return,我试图在for循环中的承诺完成后做出响应 我已经看过了,但他们没有解决我的情况 methodGetOrders和methodGetLines是我必须使用的外部库的一部分。它们都进行网络呼叫,因此存在一些预期的延迟。函数始终返回“0”,因为它不等待内部承诺完成。我意识到无法“等待”承诺完成,但如何在响应中获得计数器的正确值 doWorkMainFunction() { methodGetOrders() .then(orderList => { var count

我试图在for循环中的承诺完成后做出响应

我已经看过了,但他们没有解决我的情况

methodGetOrders和methodGetLines是我必须使用的外部库的一部分。它们都进行网络呼叫,因此存在一些预期的延迟。函数始终返回“0”,因为它不等待内部承诺完成。我意识到无法“等待”承诺完成,但如何在响应中获得计数器的正确值

doWorkMainFunction() {
  methodGetOrders()
    .then(orderList =>  {
       var counter=0;
       for (var i=0; i< orderList.length; i++) {
         methodGetLines()
           .then (lineData => {
              if (someCondition) { counter++; }
            } // end of inner THEN
       } // end FOR loop
       return counter; // This always returns '0'
   } // end of outer THEN
}
doworkmain函数(){
methodGetOrders()
。然后(订单列表=>{
var计数器=0;
对于(var i=0;i{
if(someCondition){counter++;}
}//那么,内循环结束了
}//循环结束
return counter;//这始终返回“0”
}//那么外太空的结束
}

创建一个包含循环中所有承诺的数组,然后在所有承诺得到解决后使用返回计数器

methodGetOrders()
  .then(orderList => {
    var counter = 0;

    var promises = orderList.map(order => {
      return methodGetLines()
        .then(lineData => {
          if (someCondition) {
            counter++;
          }
        }) // end of inner THEN
    }) // end promise map
    return Promise.all(promises).then(_ => counter);
  }) // end of outer THEN
})

创建一个包含循环中所有承诺的数组,然后在所有这些承诺都已解决后使用返回计数器

methodGetOrders()
  .then(orderList => {
    var counter = 0;

    var promises = orderList.map(order => {
      return methodGetLines()
        .then(lineData => {
          if (someCondition) {
            counter++;
          }
        }) // end of inner THEN
    }) // end promise map
    return Promise.all(promises).then(_ => counter);
  }) // end of outer THEN
})

抱歉,我对JavaScript相当陌生,所以我想澄清一点:代码中有两个返回语句?这是“允许”的吗?您可以有任意多个返回语句。这里的返回语句甚至在不同的函数中。第一个
return
在其中,为它提供每个数组项,恰好是一个承诺返回by
methodGetLines()
…第二个返回到
methodGetOrders
。抱歉,我对JavaScript相当陌生,所以我想澄清一点:代码中有两个返回语句?这是“允许的”吗?您可以有任意多个返回语句。这里的返回语句甚至在不同的函数中。第一个
return
在内部以提供它包含每个数组项,这些数组项恰好是由
methodGetLines()
…返回的承诺,然后返回到
methodGetOrders