【问题标题】:Function not returning position object from googlemaps geocode [duplicate]函数不从googlemaps地理编码返回位置对象[重复]
【发布时间】:2024-01-16 05:19:01
【问题描述】:

我有一个函数可以从带有谷歌地理编码的地址获取 latLng。

function geoCode(address){
    var geocoder = new google.maps.Geocoder;
    geocoder.geocode({'address': address}, function(results, status) {
      if (status === 'OK') {
        var pos = {
            lat:results[0].geometry.location.lat(),
            lng:results[0].geometry.location.lng()
        };
        return pos;
      } else {
        alert('Geocode was not successful for the following reason: ' + status);
      }
    });
}

当我在这个函数中控制台记录“pos”对象时,我得到了位置,但是当我尝试在另一个函数中控制台记录它时,例如下面的那个

function foo(){
    var pos = geoCode(place);
    console.log(pos.lat);
}

我收到以下警报: TypeError: undefined is not an object (evalating 'pos.lat')

pos 对象的返回似乎有问题。

【问题讨论】:

  • 地理编码器是异步的,你不能从回调函数返回任何东西

标签: javascript google-maps position geocode


【解决方案1】:

就像 geocodezip 说你的 geoCode 函数是异步的。这意味着当您从 foo 函数调用它时,foo 在从 geoCode 获取数据之前完成,这就是您的 undefined 错误。您可以做的是将您的 geoCode 函数包装在 Promise 中,并使用来自 google 的数据解决该 Promise。

【讨论】: