首页 >web前端 >js教程 >如何通过数组传递参数来排序 Promise 执行?

如何通过数组传递参数来排序 Promise 执行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-20 14:57:02443浏览

How to Sequence Promise Execution with Parameter Passing from an Array?

通过数组传递参数来顺序执行 Promise

考虑这样的场景:您有一个值数组(例如 myArray)并且需要执行一个 Promise-顺序地基于函数(例如 myPromise),将每个数组元素作为参数传递。如何实现一个“可暂停循环”来确保 Promise 以正确的顺序得到解决?

解决方案:迭代 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn