Я видел цепочку произвольного числа promises в Q; мой вопрос другой.
Как я могу сделать переменное количество вызовов, каждый из которых возвращается асинхронно, в порядке?
Сценарий представляет собой набор HTTP-запросов, число и тип которых определяются результатами первого HTTP-запроса.
Я бы хотел сделать это просто.
Я также видел этот ответ, который предлагает что-то вроде этого:
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", которая абстрагирует рекурсию. Какой лучший способ?