2013-05-07 3 views
1

제 문제는 배열을 반복하고 각 항목에 대한 JSON 데이터를 검색 한 다음 채우는 것입니다. 나는 아래의 방법이 효과가 없다는 것을 안다. 왜냐하면 첫 번째 응답이 수신되기 전에 각 'n'을 순환 할 것이기 때문이다.이전 호출의 콜백 호출 요청

내게 필요한 것은 내 콜백 기능에서 요청을 다시 호출하는 것입니다. 따라서 첫 번째 응답이 수신 된 후 두 번째 응답을 얻으려는 전화를 걸게됩니다 ...

아무도 내가 이런 식으로 일하는 방법을 어떻게 도와 줄 수 있습니까? 최종 목표는 각 배열 항목에 적절한 응답을 채 웁니다. 프로그래밍에 익숙하지 않아 조금 복잡합니다.

function getDistance() { 

    for (n in addresses()) { 
     var service = new google.maps.DistanceMatrixService(); 
     service.getDistanceMatrix(
      { 
       origins: [clientLocation()], 
       destinations: [addresses()[n].position()], 
       travelMode: google.maps.TravelMode.DRIVING, 
       unitSystem: google.maps.UnitSystem.IMPERIAL, 
       avoidHighways: false, 
       avoidTolls: false 
      }, callbackFunction); 
    } 



function callbackFunction (response, status) { 
    addresses()[n].distanceText(response.rows[0].elements[0].distance.text) 
    addresses()[n].distanceValue(response.rows[0].elements[0].distance.value)    
    //get the next one?? 

}; 

}

P.S. Distance Matrix Service에 배열을 보내야한다는 것을 알고 있습니다.하지만 자주 제기되기 때문에이 문제를 일반적으로 파악하고 싶습니다.

P.P.S. 나는 knockout.js를 사용하고 있으므로 addresses() [n] 호출을 사용한다.

감사합니다.

function callbackFunction (response, status) { 
    addresses()[n].distanceText(response.rows[0].elements[0].distance.text) 
    addresses()[n].distanceValue(response.rows[0].elements[0].distance.value)    

    //get the next one?? 
    arguments.callee(response, status); 
}; 

당신이 조금 필요에 맞게 것을 수정해야 할 수도 있습니다, 그래서 내가 넉 아웃에 익숙 해요 :

답변

0

당신은 함수 호출 자체를 가지고 arguments.callee를 사용할 수 있습니다.

+0

감사합니다. 그러나 스크립트는 응답을 받기 전에 N을 반복합니다. 각 배열 항목을 반복하도록하려면 어떻게해야합니까? –

+0

@ RaySülzer 콜백 함수를 사용하고 있습니다. 콜백 함수는 "아직 데이터가 없으므로 정상적인 실행을 계속하고 데이터를 얻을 때 논리를 실행합니다."라고 말합니다. 매우 자연 스럽기 때문에 service.getDistanceMatrix가 데이터와 함께 반환 될 때까지 코드는 응답을 실행하지 않습니다. – AlexLordThorsen

+0

하지만 문제는 배열에 데이터를 적용하지 않고 루프를 계속 진행한다는 것입니다. –