等待执行所有ajax回调的最佳解决方案

gla*_*666 9 javascript ajax jquery functional-programming callback

想象一下,我们必须得到ajax请求的来源.我想在触发所有回调时执行一些操作.除了这种方法,如何做到这一点:

(function($){
  var sources = ['http://source1.com', 'http://source2.com'],
  guard = 0, 
  someHandler = function() { 
    if (guard != sources.length) { return; }
    //do some actions
  };

  for (var idx in sources) {
    $.getJSON(sources[idx], function(){ guard++; someHandler(); })
  }
})(jQuery)
Run Code Online (Sandbox Code Playgroud)

我在这里不喜欢的是,在这种情况下,我无法处理响应失败(例如,我无法设置响应的超时)和整体方法(我想应该有一种方法来使用更多的功能这里编程)

有任何想法吗?

问候!

UPD:感谢带有链接回调的解决方案.我在这里找到了一个好方法:.这是评论中提出的内容:

(function hidenext(jq){
    jq.eq(0).fadeOut("fast", function(){
        (jq=jq.slice(1)).length && hidenext(jq);
    });
})($('div#bodyContent a'))
Run Code Online (Sandbox Code Playgroud)

通过一些调整,它可以等待最后一次回调.

现在我想要正确处理长时间运行的请求.有线索吗?

axe*_*l_c 0

也许您可以“级联”下载,以便第一个 getJSON 的回调触发从下一个源下载,依此类推?然后在最后一个回调中,您没有剩余的源,可以调用您的“完成”函数。