Pao*_*aJ. 38 javascript node.js deferred
我使用延迟模块在Node.js中创建了我的第一个延迟对象,当我将结果传递给下一个函数并触发解析和拒绝时它很有效.当每个函数返回deferred.promise时,如何链接函数数组的执行?我喜欢第一个函数的输入参数数组和输入参数,以及前一个函数的每个下一个函数get参数.
它f1(100).then(f2).then(f3)有点像,但是当我有多个函数时.
小智 80
同样的想法,但你可能会发现它稍微更优雅或更紧凑:
funcs.reduce((prev, cur) => prev.then(cur), starting_promise);
Run Code Online (Sandbox Code Playgroud)
如果您没有特定的starting_promise想要使用,请使用Promise.resolve().
SLa*_*aks 45
您需要在循环中构建一个promise链:
var promise = funcs[0](input);
for (var i = 1; i < funcs.length; i++)
promise = promise.then(funcs[i]);
Run Code Online (Sandbox Code Playgroud)
在@torazaburo的基础上,我们还可以添加一条"不快乐的道路"
funcs.reduce(function(prev, cur) {
return prev.then(cur).catch(cur().reject);
}, starting_promise);
Run Code Online (Sandbox Code Playgroud)
2017 年的 ES7 方式。http://plnkr.co/edit/UP0rhD? p= preview
async function runPromisesInSequence(promises) {
for (let promise of promises) {
console.log(await promise());
}
}
Run Code Online (Sandbox Code Playgroud)
这将按顺序(一个接一个)执行给定的函数,而不是并行执行。参数promises是函数的集合(NOT Promises),它返回Promise.
ES6, allowing for additional arguments:
function chain(callbacks, initial, ...extraArgs) {
return callbacks.reduce((prev, next) => {
return prev.then((value) => next(value, ...extraArgs));
}, Promise.resolve(initial));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18645 次 |
| 最近记录: |