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

问题描述 投票:0回答:1

我想在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
}
javascript for-loop promise return
1个回答
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
})
© www.soinside.com 2019 - 2024. All rights reserved.