Widziałem Chaining an arbitrary number of promises in Q; moje pytanie jest inne.Jak połączyć łańcuchową liczbę obietnic w Q, w kolejności?
Jak ustawić zmienną liczbę połączeń, z których każda zwraca się asynchronicznie, w kolejności?
Scenariusz to zbiór żądań HTTP, których liczba i typ jest określany na podstawie wyników pierwszego żądania HTTP.
Chciałbym to zrobić po prostu.
widziałem też this answer co sugeruje coś takiego:
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);
}
... ale wydaje się niewygodne do pętli poprzez itemsToProcess w ten sposób. Lub, aby zdefiniować nową funkcję o nazwie "pętla", która streszcza rekursję. Jaki jest lepszy sposób?
Wydaje się, że nie jest to zmienna liczba obietnic, ale liczba ustawiona w zależności od długości tablicy. Zdarzają się przypadki, w których faktycznie masz numer zmiennej i nie jestem pewien, że dla nich działa metoda 'reduce'. – hippietrail
https://github.com/kriskowal/q#sequences będzie oficjalnym numerem referencyjnym – Aides