在Node应用程序中,我需要以同步方式遍历某些项目,但是循环内的某些操作是异步的。我的代码现在看起来像这样:
someAPIpromise().then((items) => { items.forEach((item) => { Promise.all[myPromiseA(item), myPromiseB(item)]).then(() => { doSomethingSynchronouslyThatTakesAWhile(); }); } }
这可以弄清楚何时items是由1组成的数组。但是,一旦有多个项目,promise.all()将立即为该数组中的每个项目触发,而无需等待循环中的操作结束。
items
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范围内,直到调用完成,就可以根据需要异步启动所有调用。
希望对大家有帮助!