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