promise.all都在forEach循环中-一切立即触发

在Node应用程序中,我需要以同步方式遍历某些项目,但是循环内的某些操作是异步的。我的代码现在看起来像这样:

someAPIpromise().then((items) => {

items.forEach((item) => {

Promise.all[myPromiseA(item), myPromiseB(item)]).then(() => {

doSomethingSynchronouslyThatTakesAWhile();

});

}

}

这可以弄清楚何时items是由1组成的数组。但是,一旦有多个项目,promise.all()将立即为该数组中的每个项目触发,而无需等待循环中的操作结束。

这么说…我如何确保数组中每个项目的整个操作都同步运行(即使某些操作是异步的并返回了Promise)?

非常感谢!

ñ

回答:

好的…我们能够使其工作的方式:在Promises的帮助下array.reduce()。最终结果:

myAsyncAPIcall.then(items => {

items.reduce((current, nextItem) => {

return current.then(() => {

return new Promise(res => {

Promise.all([myPromiseA(nextItem), myPromiseB(nextItem]).then(() => {

someSynchronousCallThatTakesAWhile(nextItem);

res();

}).catch(err => {

console.log(err);

});

});

});

}, Promise.resolve())

})

它的工作方式是,通过将数组的每个项目包装在自己的Promise(resolve,reject)中,我们可以确保每次迭代都同步运行,因为一次迭代的完成将触发解决下一个Promise的需求,并且等等等等。在每个promise解决方案中,只要知道调用只能在父promise范围内,直到调用完成,就可以根据需要异步启动所有调用。

希望对大家有帮助!

以上是 promise.all都在forEach循环中-一切立即触发 的全部内容, 来源链接: utcz.com/qa/435670.html

回到顶部