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