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

时间:2017-12-26 19:12:59

标签: javascript for-loop promise return

我试图在for循环中的Promise完成之后做出响应。

我查看了these questions,但他们没有解决我的情况。

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
}

1 个答案:

答案 0 :(得分:2)

在循环中创建所有承诺的数组,然后在所有承诺解决后使用Promise.all()返回计数器

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
})