考虑这样的场景:您有一个值数组(例如 myArray)并且需要执行一个 Promise-顺序地基于函数(例如 myPromise),将每个数组元素作为参数传递。如何实现一个“可暂停循环”来确保 Promise 以正确的顺序得到解决?
要实现顺序执行,可以使用 Promise 链的组合和迭代处理。下面是一个代码片段,演示了如何做到这一点:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
这种方法利用reduce方法来迭代数组并创建一系列链式承诺。每个 Promise 在前一个 Promise 完成后都会得到解决,从而有效地强制执行所需的执行顺序。
如果您支持异步函数,可以使用 forEachSeries 获得更清晰的解决方案函数:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
此函数迭代数组并在每个元素处暂停,等待 Promise 解决后再继续下一次迭代。
如果需要将promise的返回值收集到数组中,可以修改forEachSeries函数如下:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
该函数迭代数组,将promise的结果累加到results中数组,最后返回收集到的结果。
以上是如何通过数组传递参数来排序 Promise 执行?的详细内容。更多信息请关注PHP中文网其他相关文章!