2011-04-17 91 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

它是一個異步函數,你不能這樣做,

相關問題