保证Javascript中的异步请求回调顺序

Chr*_*Han 6 javascript jquery asynchronous callback

在Javascript中,我有两个对数据的异步请求:

$.getJSON('http://foo.com', fooQuery, fooSuccess(data));
$.getJSON('http://bar.com', barQuery, barSuccess(data));
Run Code Online (Sandbox Code Playgroud)

和两个回调来处理收到的数据:

fooSuccess(data) { // Stuff }
barSuccess(data) { // More Stuff }
Run Code Online (Sandbox Code Playgroud)

如何确保仅在fooSuccess完成后执行barSuccess?

笔记:

  • 我希望保持数据请求的原样:异步和非阻塞(因为服务器响应可能需要一段时间).
  • 但是,我希望处理数据的回调顺序执行.也就是说,在fooSuccess完成之前,我不想执行barSuccess.

非常感谢你的智慧和帮助!

dav*_*vid 5

以下是使用ajax请求返回的jQuery延迟对象的方法.

var fooDfd = $.getJSON('http://foo.com', fooQuery);
var barDfd = $.getJSON('http://bar.com', barQuery);

fooDfd.then(function(fooData){
    fooSuccess(fooData);
    barDfd.then(barSuccess);
});
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 5

最好的方法是使用这样的jQuery when().done()功能:

$.when(
    $.getJSON('http://foo.com', fooQuery, fooSuccess(data)), 
    $.getJSON('http://bar.com', barQuery, barSuccess(data))
).done(function(arg1, arg2){
    fooSuccess(arg1);
    barSuccess(arg2);
});
Run Code Online (Sandbox Code Playgroud)

done()所有请求成功完成后,这允许同时执行AJAX请求并保证执行该功能.