首页 > web前端 > js教程 > 正文

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

Mary-Kate Olsen
发布: 2024-10-20 14:57:02
原创
373 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!