그래서 나는 다음과 같은 속성을 가진 객체의 배열이 있습니다, 첫 번째 개체는 아무것도 설정이없는 지금 Address
, Latitude
, Longitude
및Google지도 API 기능은 시간에 결과를 반환하지 않습니다
poi("139 Main St", 0, 0, "Farmer's Market"),
poi("18 N Hopkins Ave", 37.4455, -143.7728, "YMCA"),
poi("42 Universe St", 37.4855, -143.8781, "Original Pizza #32")
Title
을 위도와 경도 때문에 Google의 Geocode API를 사용하여 누락 된 데이터를 채우고 싶었습니다. 내 API 키와 함께 API 스크립트 링크가 포함되어 잘 작동합니다.
그런 다음 배열을 통과하고 누락 된 데이터가있는 객체를 찾는 for
루프를 만들었습니다. 비어있는 셀을 모두 거쳐 올바른 정보로 대체해야합니다. 그러나 정보가 검색 되더라도 루프가 완료된 후에 정보가 검색됩니다. 나는 올바른 정보를 콘솔 할 수 있지만, 함수가 빈 데이터를 반환 한 후에야 알 수있다.
for (i=0; i < poiArray.length; i++) {
var curr = poiArray[i];
if (!curr.lat || !curr.long) {
geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': curr.address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
cur.lat = results[0].geometry.location.k;
cur.long = results[0].geometry.location.B;
} else {
console.log('failed to include ' + curr.title);
poiArray.splice(i--, 1);
}
});
}
}
나는 timeout
과 중첩 기능을 시도했지만, 아무것도 작동하는 것 같다 없습니다. 어떤 제안? 내가 루프, 내 배열 ... 모든 시간의 마지막 번호를 내에서 if (status == google.maps.GeocoderStatus.OK) {
변수 i
후 콘솔 경우 :
나를 조금 더 불확실성을 언급하자. 그리고 루프는 Google의 비동기 데이터가로드 된 후 내
poiArray
을 콘솔하면 내 배열의 마지막 항목 만 업데이트하는 것으로 보입니다.
정보가 콘솔에 기록 된 후 poiArray를 확인하고 업데이트되었는지 확인할 수 있습니까? for 루프는 이미 끝났을 지 모르지만 변수가 업데이트되어야한다고 생각합니다. 데이터가 아직 업데이트되지 않은 나머지 코드가 실행되기 시작하는 문제입니까? –
지오 코더가 비동기입니다. 결과는 서버에서 돌아올 때 서버에서 다시 나타납니다. 함수 종료를 통해 문제를 해결할 수 있습니다. – geocodezip
** 비동기 ** 요청을하고 있습니다 - 현재 루프 반복이 끝날 때까지 콜백 함수의 전체 용도 인 데이터를 사용할 수 없습니다. 이것은 당신을 위해 좋은 읽을 거리입니다 - http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call. – Adam