我想在循环中调用jQuery延迟函数,但是每次迭代都应该使用延迟when()
function (num_of_iterations) {
var arr = [];
for (var i = 1; i < num_of_iterations; ++i) {
arr.push($.getJSON( ... 1 ... ));
arr.push($.getJSON( ... 2 ... ));
...
$.when.apply($, arr).then(function() {
// somehow do the next iter. only now that all the asynch getJSON's are done
});
}
return;
}
现在当然,因为getJSON
是异步的,所有迭代中的所有请求实际上都会在调用任何when
之前发送。
我意识到我可以通过调用一个包含我在then
中所拥有的函数的递归来实现这一点。
但我想知道是否有一些我缺少使用的技术而不是递归。我总是担心在将来的某个时候使用堆栈的递归。参数num_of_iterations
可能非常大。
我可以使用pipe()
吗?关于过滤的所有话题,我在为文档编写文档时遇到了很多麻烦......
答案 0 :(得分:1)
我认为在这种情况下你可以使用管道链接。看看这个工作jsfiddle,让我知道这是否或多或少你正在寻找。 http://jsfiddle.net/tchaffee/Df3ay/3/
答案 1 :(得分:0)
在异步JavaScript中,函数链接和递归是很自然的事情。如for语句中所示,您的循环将运行10次。这意味着你还将有一个10的递归堆栈,所以没有什么可以担心堆栈大小(除非你搞砸了你的返回条件并且它永远运行)。