【问题标题】:Serial execution of functions returning promises返回承诺的函数的串行执行
【发布时间】:2017-07-01 10:27:29
【问题描述】:

有了 ES2016,我们现在有了 Promise,这很棒。不幸的是,该功能非常简约,并且没有像 async 包中可用的系列或瀑布。 如果有一个包为 Promise 提供此功能,或者人们通常如何处理这些用例?

【问题讨论】:

  • 你要一个 promise 库吗?
  • 这就是.then 的用途
  • @evolutionxbox 如果是这样的话:是的
  • @materialdreams 您可以使用.reduce 串行执行返回承诺的函数数组

标签: javascript ecmascript-6 promise es6-promise


【解决方案1】:

要串行执行返回承诺的函数数组,您可以使用Array.prototype.reduce

let final = functions.reduce((prev, f) => prev.then(f), Promise.resolve());

“初始”参数 Promise.resolve() 用于为 Promise 链播种,否则(如果传递一个仅包含单个函数的数组).reduce 回调永远不会被调用。

【讨论】:

    【解决方案2】:

    该语言中的大部分功能已经存在(或将存在):

    • 同时运行一系列操作并获得一组结果的 Promise:Promise.all()
    • 运行一系列操作并获得第一个解决/拒绝的承诺:Promise.race()
    • 串行运行一堆 Promise:像其他答案提到的那样使用 reduce(),或使用异步迭代协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2021-07-16
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多