Ho visto Chaining an arbitrary number of promises in Q; la mia domanda è diversa.Come concatenare un numero variabile di promesse in Q, in ordine?
Come è possibile effettuare un numero variabile di chiamate, ognuna delle quali restituisce in modo asincrono, in ordine?
Lo scenario è un insieme di richieste HTTP, il cui numero e tipo è determinato dai risultati della prima richiesta HTTP.
Mi piacerebbe farlo semplicemente.
Ho visto anche this answer che suggerisce qualcosa di simile:
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);
}
... ma sembra difficile da collegare attraverso l'itemsToProcess in quel modo. O per definire una nuova funzione chiamata "loop" che astrae la ricorsione. Qual è un modo migliore?
Questo sembra non essere un numero variabile di promesse, ma un numero impostato in base alla lunghezza dell'array. Ci sono casi in cui hai effettivamente un numero variabile e non sono sicuro che il metodo 'reduce' funzioni per quelli. – hippietrail
https://github.com/kriskowal/q#sequences sarebbe il riferimento ufficiale – Aides