[英]multiple simultaneous ajax requests broker
如何協調同時進行的ajax調用並僅在全部完成后才采取措施?
是否有一個方便的javascript幫助程序庫,該庫將協調對數據庫的多個同時ajax調用,並在所有ajax數據提取均返回其數據時調用指定的回調? 我想向我的“協調員”或“經紀人”提交准備好的隨時可用的ajax調用的字典,以及我的WhenAllCompleted回調函數。
用例很常見:在將數據庫記錄綁定到UI之前,必須填充所有外鍵數據關系的下拉列表,以便用戶看到有意義的值,而不是通常的整數鍵。存儲在記錄中。
如果已經有了一個健壯的標准庫,我寧願不重新發明所有的管道代碼來跟蹤每個ajax請求的狀態。
編輯:這是描述我想要做什么的偽代碼:
when ajax1fetch is finished
and
ajax2fetch is finished
and
ajax3fetch is finished
and SELECT1 is populated
and SELECT2 is populated
and SELECT3 is populated
bindRecordToUI()
在將代碼重組為使用$.when()
,我要在.ajax()成功回調中獲取數據,然后在該回調中填充SELECT。 當填充SELECT時,我將記錄綁定到UI。
如果我們提供$.when
ajax調用列表,則在ajax請求完成時調用完成的回調,該完成發生在 SELECT填充之前 (如果SELECT的項目列表很長)。
我不知何故需要將SELECT元素的填充作為附加的when-conditions,並找到一種方法,以將ajax調用返回的數據路由到填充函數(如果SELECT-populate函數不會在peform中執行)。 ajax成功回調。
由於您已經在使用jQuery,因此可以使用jQuery.when()
方法等待多個Deferred
結束。 需要注意的是jQuery.ajax()
及其包裝方法,像jQuery.get()
返回一個jqXHR
對象,它是一個類型的Deferred
。
您將從$.ajax
或等效調用中獲取Deferred
,然后將它們全部傳遞給$.when
。 您將獲得一個Promise
,它基本上是一個只讀的Deferred
*。 然后,您可以在此Promise
附加完成/錯誤處理程序,一旦所有傳入的Deferred
都被解析,則將被解決;如果任何Deferred
被拒絕,則被拒絕。
var def1 = $.ajax(),
def2 = $.ajax({ /* some params */});
var masterPromise = $.when(def1, def2);
masterPromise.done(function() {
console.log('def1 and def2 are done!');
});
Deferred
允許附加各種完成和錯誤處理程序,以及解決和取消以及控制異步操作的方法。 Promise
僅允許附加處理程序,並且不允許控制異步操作。 您可以使用Deferred.promise()
方法從jQuery Deferred
獲得Promise
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.