如何在每个函数返回deferred.promise时链接函数数组的执行?

我已经在Node.js中使用延迟模块创build了我的第一个延迟对象,当我将结果传递给下一个函数并触发parsing和拒绝时,它工作的很好。当每个函数返回deferred.promise时,如何链接执行函数数组? 我有第一个函数的函数和input参数的input参数数组,每个下一个函数从前一个获取参数。

它的作用就像f1(100).then(f2).then(f3) ,但是当我有n个函数的时候。

您需要在循环中构build一个承诺链:

 var promise = funcs[0](input); for (var i = 1; i < funcs.length; i++) promise = promise.then(funcs[i]); 

同样的想法,但你可能会发现它稍微更分类或更紧凑:

 funcs.reduce((prev, cur) => prev.then(cur), starting_promise); 

如果你没有特定的starting_promise你想使用,只需使用Promise.resolve()

build立在@torazaburo,我们也可以添加一个'不快乐的path'

 funcs.reduce(function(prev, cur) { return prev.then(cur).catch(cur().reject); }, starting_promise); 

ES6,允许其他参数:

 function chain(callbacks, initial, ...extraArgs) { return callbacks.reduce((prev, next) => { return prev.then((value) => next(value, ...extraArgs)); }, Promise.resolve(initial)); } 

对于可能的空数组:

 var promise = $.promise(function(done) { done(); }); funcs.forEach(function(func) { promise = promise.then(func); }); 

ES7的方式在2017年。http://plnkr.co/edit/UP0rhD? p= preview

  async function runPromisesInSequence(promises) { for (let promise of promises) { console.log(await promise()); } } 

这将按顺序(逐个)执行给定的function,而不是并行执行。 参数promises是一个函数集合(NOT Promise ),它返回Promise