无法返回Geocode latLng

Ste*_*ven 1 javascript google-maps latitude-longitude

我已经创建了一个返回刻度和经度的函数.
问题是alert('outside:')之前是触发的geocoder.geocode.

看看这个类似的例子,这个功能应该可行.

 function getLatLng(geocoder, adr) {
    var latLng = '';
    geocoder.geocode({ 
      address: adr}, function(results, status){
        if (status == google.maps.GeocoderStatus.OK && results.length) {
          latLng = results[0].geometry.location;
          alert('inside: ' + latLng); // This works
        } 
      }
    );
    alert('outside: ' + latLng); // This shows NULL
    return latLng;
 }
Run Code Online (Sandbox Code Playgroud)

那么我需要做什么才能返回latlng值?

no.*_*ing 5

你会看到这种模式在JavaScript中用于异步操作 - 第二个参数geocode()是一个回调函数,当潜在的昂贵和长期的地理编码操作完成时,它会被调用.如果调用是同步的,它会锁定您的网页和任何其他JavaScript代码,直到它返回.

使用异步函数的一个小挫折是它们立即返回,因此您不能使用它return来返回值; 就像你在地理编码示例中发现的那样 - 在geocode()没有结果的情况下立即返回调用并在后台运行,稍后调用带有实际结果的回调函数.

一种解决方案是在调用时自己指定一个回调函数getLatLng:

function getLatLng(geocoder, adr, myCallback){
    var latLng = '';
    geocoder.geocode({
                address: adr
            }, 
            function(results, status){
                if (status == google.maps.GeocoderStatus.OK && results.length) {
                    latLng = results[0].geometry.location;
                    if(myCallback){
                        myCallback(latlng);
                    }
                }
            });
}
Run Code Online (Sandbox Code Playgroud)