【发布时间】:2013-07-19 10:07:23
【问题描述】:
如何按顺序进行可变数量的调用,每个调用都异步返回?
场景是一组 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 似乎很尴尬。或者定义一个名为“循环”的新函数来抽象递归。有什么更好的方法?
【问题讨论】:
-
这似乎不是一个可变数量的promise,而是一个取决于数组长度的固定数量。在某些情况下,您实际上有一个可变数字,但我不确定
reduce方法是否适用于这些情况。