串行执行返回promise的函数

时间:2017-02-13 12:25:07

标签: javascript ecmascript-6 promise es6-promise

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

2 个答案:

答案 0 :(得分:5)

要连续执行返回promises的函数数组,可以使用Array.prototype.reduce

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

"首字母"参数Promise.resolve()用于为promises链设定种子,否则(如果传递的数组只包含一个函数),.reduce回调永远不会被调用。

答案 1 :(得分:1)

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

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