无法返回地理代码延迟



我创建了一个函数来返回经度和纬度。
问题是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;
 }

那么我需要做什么才能返回延迟值呢?

您将看到这种模式在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);
                    }
                }
            });
}

这是一个异步函数,你不能这么做

最新更新