2013-06-20 65 views
1

根據實體的類型,我需要對freebase執行n個查詢。Freebase:For循環中的異步調用

例如,如果在前面查詢得到的種類和我做的:

for (var n=0;n<types.length;n++) { 
subquery(types[n]); 
} 

function subquery (typid) { 
query = [{ 
    "schema": { 
     "id": typid, 
     ... etc ... } 
}] 

$.getJSON(service_url + '?callback=?', params, function(response) { 
    '... etc...'; 
} 
} 

但第一$.getJSON響應之前,執行第二個for循環。我無法想象解決方案,雖然我讀了很多關於異步調用的信息。

回答

1
for (var n=0;n<types.length;n++) { 
    subquery(types[n]); 
} 

上述代碼將調用子查詢,並且每個子查詢調用將立即完成,因爲$ .getJSON函數不會中斷工作流。

在上述代碼執行完畢後,ajax請求的types.length時間幾乎在同一時間開始,並且總是會有競爭條件。

一種方法是使用jquery延遲對象,它完全解決您描述的情況,更多閱讀Using Deferreds in jQuery 1.5