我试图在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
}
答案 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
})