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循环的主要内容,如果未能解决你的问题,请参考以下文章
async/await 函数中的 JavaScript Promise 解析最终响应数组
Javascript - 异步等待和获取 - 返回值,而不是承诺?