2014-11-03 58 views
0

我試圖獲得將Google地圖標記放置在陸地(大陸)或水面(海洋)上的返回值。當我嘗試控制檯日誌時,我應該將標記放置在陸地上,而將它放在水上時是正確的。然而,標記的價值似乎滯後一步:例如,將它放置在水上將返回真實,然後將其放置在陸地上將返回錯誤,但將其重新置於陸地上將再次變爲真實。回調函數中變量的值 - Google Maps

如何獲取geocoder回調函數中「result」變量的正確值?

爲什麼我會得到滯後的結果以及如何修復?

謝謝。

var result = true; 
     function checkMarkerOnLand(event) { 

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

      geocoder.geocode({ 

       "latLng" : event.latLng 

      }, function(results, status) { 

       if (status !== google.maps.GeocoderStatus.OK) { 

        result = false; 
        //return result; 

       } else { 

        result = true; 
        //return result; 

       } 

      }); 

      return result; 

     } 

回答

1

回調的一點就是: - 您發送到服務(該服務可能會在不同的服務器上)的請求。
- 服務準備就緒時,它會觸發您選擇的回調(=您自己寫的一個函數)。

(這是調用手機上有人問一個朋友的電話號碼是等價的。他不知道自己的權利,但是當他做,他會給你回電話)發送請求後

權,代碼只是繼續。因此,在發送geocoder.geocode()之後,它會在服務準備好很久之前執行返回結果。

所以不,你不能使用checkMarkerOnLand()作爲返回結果的函數。 改變你的邏輯,這樣你就可以用這個結果計劃什麼,你只需要在回調中處理它。

+0

我可以問問Stackoverflow社區這個半年前的帖子發生了什麼,突然得到額外的積分?只是對機制感到好奇 – 2015-05-20 10:38:22