2013-06-20 5 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가 응답하기 전에, 루프의 두 번째 실행

. 비동기 호출에 대한 많은 정보를 읽었지만 솔루션을 상상할 수 없습니다.

답변

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

위의 코드는 $ .getJSON 함수가 작업 흐름을 방해하지 않기 때문에 하위 쿼리 및 각 하위 쿼리 호출이 즉시 완료됩니다 호출합니다.

위의 코드를 실행 한 후에는 아약스 요청의 types.length 시간이 거의 같은 시간에 시작되었으며 항상 경쟁 조건이 발생합니다.

하나의 접근법은 설명하는 조건을 정확히 해결하는 jquery 지연 객체를 사용하는 것입니다. Using Deferreds in jQuery 1.5