遵循典型的REST標準,我將自己的資源分解爲單獨的端點和調用。這裏所討論的主要兩個對象是List
和Item
(當然,列表還包含項目列表以及與其關聯的一些其他數據)。如何使一個乾淨的異步循環?
因此,如果用戶想要檢索他的名單,他可能會做一個GET請求api/Lists
然後,用戶可能希望得到這些列表中的一個項目,並作出獲取到api/ListItems/4
其中4被發現從前面調用中檢索到的List.listId
。
這一切都很好:$.ajax
的options.complete
屬性讓我指向一個回調方法,所以我可以簡化這兩個事件。
但事情變得非常混亂,如果我想獲得所有元素的問題。例如,我們假設我有一個名爲makeGetRequest
的庫函數,它接受終點和回調函數,以使代碼更清晰。簡單地檢索3個元素的天真的方式導致在這:
var success1 = function(elements){
var success2 = function(elements){
makeGetRequest("api/ListItems/3", finalSuccess);
}
makeGetRequest("api/ListItems/2", success2);
}
makeGetRequest("api/ListItems/1", success1);
令人厭惡!這是編程101中的那種東西,我們在手腕上敲擊並指向循環。但是,你怎麼能用循環來做到這一點,而不必依靠外部存儲?
for(var i : values){
makeGetRequest("api/ListItems/" + i, successFunction);
}
function successFunction(items){
//I am called i-many times, each time only having ONE list's worth of items!
}
甚至與存儲,我必須知道什麼時候所有已經完成,並取回自己的數據,並調用檢索所有收集到的數據,並做一些事情有它的一些主站功能。
有沒有處理這個問題的做法?這一定已經解決了很多次......
JQuery $ .get和$ .each – mplungjan 2012-08-02 17:46:30
是否有一個原因讓您在後端沒有路徑來爲您檢索所有內容,例如'api/ListItems/all'或類似的東西?那麼你可以避免使用任何類型的異步循環。 – jackwanders 2012-08-02 17:58:06