[英]Guaranteeing asynchronous request callback order in Javascript
在Javascript中,我有兩個對數據的異步請求:
$.getJSON('http://foo.com', fooQuery, fooSuccess(data));
$.getJSON('http://bar.com', barQuery, barSuccess(data));
和兩個回調來處理收到的數據:
fooSuccess(data) { // Stuff }
barSuccess(data) { // More Stuff }
如何確保僅在fooSuccess完成后執行barSuccess?
筆記:
非常感謝你的智慧和幫助!
以下是使用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);
});
最好的方法是使用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);
});
所有請求成功完成后,這允許同時執行AJAX請求並保證執行done()
函數。
半小時前我正在關注這篇非常有趣的帖子,當看到由@Mike Brant呈現的優雅解決方案時,我很快就會潛入jquery庫,看看魔術是如何制作的。 不是嗎? 我推薦,非常有趣! BTW我認為我們不需要那么神奇,不是在這種情況下,我們有兩個異步調用處理程序(函數),無論哪個結束,我們需要知道第二個結束時,那么我們所需要的只是第三個函數這將由兩個處理程序調用,並在所有數據准備就緒時執行。 我知道這種方法將比優雅的jquery解決方案更多地消耗四到五行代碼,但最終我們的大腦和靈魂將處於更好的狀態。 對不起我的英文。
將barSuccess
調用放入fooSuccess
成功回調中。
fooSuccess(data){
jQuery.ajax({
data: data,
success: function(response){
barSuccess(data) //should still be in scope, I think?
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.