您可以在文档中找到解决方案:
promised_functions.reduce(Q.when, Q()).then(function () {
// if all promises resolved do some
});
跳到文档的“序列”部分。逐字复制:
如果您有许多需要按顺序运行的 Promise 生成函数,您当然可以手动执行此操作:
return foo(initialVal).then(bar).then(baz).then(qux);
然而,如果你想运行一个动态构造的函数序列,你会想要这样的东西:
var funcs = [foo, bar, baz, qux];
var result = Q(initialVal);
funcs.forEach(function (f) {
result = result.then(f);
});
return result;
您可以使用 reduce 使其稍微紧凑:
return funcs.reduce(function (soFar, f) {
return soFar.then(f);
}, Q(initialVal));
或者,您可以使用超紧凑版本:
return funcs.reduce(Q.when, Q());
你有它。直接从马嘴里。