2016-07-09 3 views
0

역이 코드를 가지고 : 주석구글 지오 반환 변수

var reverseGeo = function (latitude, longitude){ 

var address1; 

var geocoder = new google.maps.Geocoder(); 

var location = new google.maps.LatLng(latitude, longitude); 

geocoder.geocode({'latLng': location}, function(results, status){ 
    if(status === google.maps.GeocoderStatus.OK){ 
     if(results[0]){ 
      address1 = results[0].formatted_address; 
      //console.log(address1); 

     } 
     else{ 
      console.log(status); 
     } 

    } 

}); 

console.log(address1); 
}; 

첫 번째 console.log(); 올바른 것입니다. 그것은 형식화 된 주소를 포함합니다. 하단의 두 번째 console.log()undefined입니다. 내가 여기서 무엇을 놓치고 있니? 또한이 스크립트를 직접 호출하는 상위 javascript 파일에이 변수 address1을 반환해야합니다. 아무리 그래도 난 무엇을하려고 내가 geocoder.geocode();

답변

1

당신이 제 2의로

geocoder.geocode 함수는 콜백 함수를 받아 자바 스크립트 함수 및 콜백 함수의 비동기 기능을 이해에 문제가있는 로컬에 대한 제외한 모든 undefined를 얻을 매개 변수. 이 함수는 주소가 검색 될 때마다 비동기 적으로 호출됩니다.

끝에있는 console.log는 작동하지 않습니다. geocoder.geocode() 함수가 호출 된 후 프로그램은 콜백 함수가 호출 될 때까지 기다리지 않고 다음 명령을 즉시 실행하기 때문입니다. 이 경우 address1 변수는 아직 채워지지 않습니다.

실제로 찾고있는 것은 사용자의 위치와 콜백 기능을 허용하는 기능입니다. 이런 식으로 뭔가 :

당신이 주소를 사용하려면 다른 파일에서 이제
function getAddress(location, callback){ 
    geocoder.geocode({'latLng': location}, function(results, status){ 
     if(status === google.maps.GeocoderStatus.OK){ 
      if(results[0]){ 
       var address1 = results[0].formatted_address; 
       callback(address1); 
      } 
     } 
    }); 
} 

,이 같은이 함수를 호출 할 수 있습니다 : 여기

var location = new google.maps.LatLng(latitude, longitude); 
getAddress(location, function(address) 
{ 
    console.log(address); 
}); 

과, 주소를 검색 한 후, 주소를 수락하도록 정의한 함수가 호출되고 주소 변수를 사용할 수 있습니다.

+0

필자는 함수가 객체이며 다른 함수로 전달되어 실행될 수 있음을 알고 있습니다. 그러나, 나는 완전히 비동기 실행을 이해하지 못한다. –

관련 문제