ドキュメントで解決策を見つけることができます:
promised_functions.reduce(Q.when, Q()).then(function () {
// if all promises resolved do some
});
ドキュメントの「シーケンス」セクションまでスキップします。そのままコピーするには:
順番に実行する必要があるプロミス生成関数が多数ある場合は、もちろん手動で実行できます。
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());
そこにあります。馬の口から真っ直ぐに。