제 문제는 배열을 반복하고 각 항목에 대한 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);
};
당신이 조금 필요에 맞게 것을 수정해야 할 수도 있습니다, 그래서 내가 넉 아웃에 익숙 해요 :
감사합니다. 그러나 스크립트는 응답을 받기 전에 N을 반복합니다. 각 배열 항목을 반복하도록하려면 어떻게해야합니까? –
@ RaySülzer 콜백 함수를 사용하고 있습니다. 콜백 함수는 "아직 데이터가 없으므로 정상적인 실행을 계속하고 데이터를 얻을 때 논리를 실행합니다."라고 말합니다. 매우 자연 스럽기 때문에 service.getDistanceMatrix가 데이터와 함께 반환 될 때까지 코드는 응답을 실행하지 않습니다. – AlexLordThorsen
하지만 문제는 배열에 데이터를 적용하지 않고 루프를 계속 진행한다는 것입니다. –