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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript等待Promise在返回响应之前完成for循环相关的知识,希望对你有一定的参考价值。

我想在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
}
答案

在循环中创建所有承诺的数组,然后在所有承诺解决后使用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
})

以上是关于Javascript等待Promise在返回响应之前完成for循环的主要内容,如果未能解决你的问题,请参考以下文章

Javascript-异步等待并获取-返回值,而不是诺言?

JavaScript - Promise对象

async/await 函数中的 JavaScript Promise 解析最终响应数组

Javascript - 异步等待和获取 - 返回值,而不是承诺?

如何让 Javascript 在发送请求之前等待 Promise?

如何在JavaScript / TypeScript中等待Promise列表?