循环每次迭代只发生在jQuery延迟后/然后可能没有递归?

我想在循环中调用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是异步的,所有迭代中的所有请求实际上都会在调用任何时间之前发送。

我意识到我可以通过调用一个包含我在这里所拥有的函数的递归来实现这一点。

但我想知道是否有一些我缺少使用的技术而不是递归。 我总是担心在将来某个时候使用堆栈的递归。 参数num_of_iterations可能非常大。

我可以使用pipe()吗? 关于过滤的所有讨论,我在浏览文档方面遇到了很多麻烦…

我想你可以在这种情况下使用管道链。 看看这个工作jsfiddle,让我知道这或多或少是你想要的。 http://jsfiddle.net/tchaffee/Df3ay/3/

在异步JavaScript中,函数链接和递归是很自然的事情。 如for语句中所示,您的循环将运行10次。 这意味着你还将有一个10的递归堆栈,所以没有什么可担心的堆栈大小(除非你搞砸了你的返回条件,它永远运行)。