2011-04-17 37 views
1

我创建了一个返回经度和纬度的函数。
问题是在geocoder.geocode之前触发alert('outside:')无法返回地理编码latLng

this similar example,这个函数应该可以工作。

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; 
} 

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

回答

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); 
        } 
       } 
      }); 
} 
+0

感谢。这解决了它:) – Steven 2011-04-17 18:45:08

0

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

相关问题