0
  • Google지도 API에서 주소를 가져 와서이 주소를 함수에 반환하려고합니다. 이러한 표시를 변경하려면 어떻게해야합니까?
    $(document).ready(function() { 
        var lat = 17.4807865; 
        var lng = 78.4921649; 
        var returnAddress = getAddressFromlatlng(function(backaddr,lat,lng){ 
        alert(" Inside : "+backaddr) 
        }); 
        alert(returnAddress+" returned address ") 
    }); 
    function getAddressFromlatlng(callback,lat,lng){ 
        alert(lat+" : "+lng) 
        var geocoder = new google.maps.Geocoder(); 
        var latlng = new google.maps.LatLng(lat,lng); 
        geocoder.geocode({'latLng': latlng}, function(results, status){ 
        alert(results[0].formatted_address) 
        callback(results[0].formatted_address); 
        }); 
    } 
    
    한 번에 값이 존재하기 전에 함수가 반환으로, 불가능 http://jsfiddle.net/mapsaceclouds/o1fa91tv/2/
+0

[왜 함수의 내부를 수정 한 후 내 변수 변경되지?]의 중복 가능성 (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after- (function-async)) – geocodezip

답변

1

찾아보세요.

geocode 호출은 비동기식이므로 비동기 적으로 결과를 처리해야합니다. 이미 값을 콜백 함수에 성공적으로 표시합니다. 즉, 결과를 처리하는 방법입니다.

getAddressFromlatlng 함수에서 약속을 반환 할 수는 있지만 실제로 변경되지는 않습니다. 이것은 콜백 함수를 객체에 랩핑하기 때문에 호출과 별도로 비동기 처리를 할 수 있습니다.

+0

감사합니다 @ Guffa, 당신은 solution [] (http://jsfiddle.net/mapsaceclouds/brnecrfw/) 또는 []에 대해이 코드를 볼 수 있습니까? http://stackoverflow.com/questions/27873908/update-jquery-jqgrid-column-with-google-api-address) – Hydrogen

+0

@acecloudsmaps : 해결책은 함수에서 값을 반환하려고하지 않는 것입니다. 문제는 루프가 끝난 후에 데이터가 도착할 때 루프 변수를 사용하여 배열에 데이터를 넣을 수 없다는 것입니다. – Guffa

1

콜백 결과에서 주소를 가져와야합니다. 좌표가 결정되면 리턴 값을 계속 처리하는 함수를 호출해야만 리턴 값을 얻을 수 있기 때문입니다. 이 경우 배열을 통해 배열 인덱스를 사용하고 필요한 데이터가 있으면 주소 필드를 업데이트하십시오. 개별적으로 처리하십시오. 배열을 통해 모든 항목에 대해 Google에 요청합니다. 일단 응답이 Google에서 돌아 오면 배열의 다음 항목으로 이동하십시오. 응답을받을 때 알 수 있도록 인덱스를 저장할 수 있으면 여러 요청을 기다리는 것이 가능합니다.

var currentIndex = null; 
function notifyAddressResolved (address) { 
    yourArray[currentIndex].address = address; 
    resolveNextAddress(); 
} 
function getAddressFromlatlng(callback, lat, lng){ 
    var geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(lat, lng); 
    geocoder.geocode({'latLng': latlng}, function (results, status) {   
     callback(results[0].formatted_address); 
    }); 
} 
function resolveNextAddress() { 
    if (currentIndex == null) { 
     currentIndex = 0; 
    } else { 
     currentIndex++; 
    } 
    getAddressFromlatlng(notifyAddressResolved, yourArray[currentIndex].lat, yourArray[currentIndex].lng); 
} 
+0

감사합니다. @vbms ... – Hydrogen

관련 문제