私はこれを見た。Chaining an arbitrary number of promises in Q;私の質問は違う。可変数の約束をQで順番に連結する方法は?
どのように非同期的に戻ってくる可変数の呼び出しを、順番どおりに行うことができますか?
シナリオは一連のHTTP要求で、その数とタイプは最初のHTTP要求の結果によって決まります。
私はこれを簡単にしたいと思います。
また、私はこのような何かを示唆this answer見てきました:
var q = require('q'),
itemsToProcess = ["one", "two", "three", "four", "five"];
function getDeferredResult(prevResult) {
return (function (someResult) {
var deferred = q.defer();
// any async function (setTimeout for now will do, $.ajax() later)
setTimeout(function() {
var nextResult = (someResult || "Initial_Blank_Value ") + ".." + itemsToProcess[0];
itemsToProcess = itemsToProcess.splice(1);
console.log("tick", nextResult, "Array:", itemsToProcess);
deferred.resolve(nextResult);
}, 600);
return deferred.promise;
}(prevResult));
}
var chain = q.resolve("start");
for (var i = itemsToProcess.length; i > 0; i--) {
chain = chain.then(getDeferredResult);
}
を...しかし、それはそのようにitemsToProcessをループに厄介なようです。あるいは、再帰を抽象化する "loop"という新しい関数を定義することもできます。より良い方法は何ですか?
これは、約束の可変数ではないようですが、配列の長さに応じて設定された数です。あなたが実際に可変数を持っているケースがあります。そして、私は 'reduce'メソッドがそれらのために働くかどうか分かりません。 – hippietrail
https://github.com/kriskowal/q#sequencesは正式な参照になります – Aides