首页 文章

无法让Googlemaps Geocoder通过回调返回LatLng

提问于
浏览
0

有人可以看看我的代码并告诉我我做错了什么吗?我知道Googlemaps地理编码器是一个异步功能,因此需要回调才能处理结果 . 所以我在这里关注这个例子,但我仍然无法让它工作:

How do I return a variable from Google Maps JavaScript geocoder callback?

我想给我的 codeAddress 函数一个实际的地址和一个回调函数 . 如果 results 数组有东西我将lat和lng发送给回调函数 .

codeAddress = function(address, callback) {
    var gpsPosition = {};
    if (geocoder) {
      geocoder.geocode({'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          if (results[0]) {
            console.log("got results!");
            var lat = results[0].geometry.location['B'];
            var lng = results[0].geometry.location['k'];
            callback(lat, lng);
          } else {
            alert("No results found");
          }
        } else {
          alert("Geocoder failed due to: " + status);
        }
      });
    }
  };

这是回调函数 . 基本上它从 codeAddress 函数获取lat和lng并将lat和lng放入哈希并返回它 . 我的想法是将哈希存储到一个名为 location 的变量中,并在我创建一个新的 Map 标记时引用 location .

createGPSPosition = function(lat, lng){
    console.log("createGPSPosition called with lat and lng:");
    console.log(lat);
    console.log(lng);
    var gpsPosition = {};
    gpsPosition.B = lat;
    gpsPosition.k = lng;
    console.log("gpsPosition:");
    console.log(gpsPosition);
    return gpsPosition;
  };

当我运行此代码 console.log(gpsPosition); 实际上记录了最终的哈希对象 . 但我仍然没有看到对象返回...所以当我这样做时:

var stuff = codeAddress("1600 Amphitheatre Pkwy, Mountain View, CA 94043", createGPSPosition)

stuff 仍然显示为 undefined . 这里发生了什么?

1 回答

  • 0

    这个问题是您希望asynchronous代码以同步方式工作 . stuffcodeAddress 完成搜索之前定义 . 最简单的解决方案是提供不同的回调,在其中定义 stuff 并在那里使用它 . 这应该工作正常:

    codeAddress("1600 Amphitheatre Pkwy, Mountain View, CA 94043", function(lat, lng){
       var stuff = createGPSPosition(lat, lng);
       console.log(stuff); // => your gpsPosition object
    });
    

    另一种方法是学习Promises .

相关问题