Google maps 谷歌地图反向地理编码:传递变量

Google maps 谷歌地图反向地理编码:传递变量,google-maps,reverse-geocoding,Google Maps,Reverse Geocoding,我试图在一个变量(javascript)中存储与纬度、经度相对应的地址。我创建了一个回调函数(在阅读了大量文章之后),代码如下。现在我想将地址存储在一个名为location3的变量中 奇怪的是,对于分配位置3之后的警报,它是未定义的。但如果在300毫秒后观察,则给出了正确的值。我想马上把地址分配到3号位置。欢迎提出任何建议 function codeLatLng1(lat,long,callback) { var geocoder = new google.maps.Geocoder()

我试图在一个变量(javascript)中存储与纬度、经度相对应的地址。我创建了一个回调函数(在阅读了大量文章之后),代码如下。现在我想将地址存储在一个名为location3的变量中

奇怪的是,对于分配位置3之后的警报,它是未定义的。但如果在300毫秒后观察,则给出了正确的值。我想马上把地址分配到3号位置。欢迎提出任何建议

  function codeLatLng1(lat,long,callback) {
  var geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(lat,long);
  if (geocoder) {
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          callback(results[1].formatted_address);
          myvariable=results[1].formatted_address;
        } else {
          alert("No results found");
        }
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }
}


lat1_last=37;long1_last=-100;
codeLatLng1(lat1_last,long1_last,function(locat) {location3=locat;});
alert (location3); // THIS ALERT SHOWS THAT IT IS STILL UNDEFINED
setTimeout(function(){alert (location3);},300);  // THIS ALERT GIVES THE RIGHT ADDRESS

这里要理解的是,geocode()的第二个参数是一个回调函数,它不会立即被调用,而是只有在从Google收到结果后才会被调用。同时,函数codeLatLng1()发布请求后,将控制权返回给调用方。在您的程序中,这意味着接下来将出现第一个alert(),然后等待一段时间,在此期间,Google将返回给您,并调用回调函数,依此类推

同样,设置位置3的匿名回调仅在收到结果时执行,而不是在codeLatLng1返回之前

将您的警报放在匿名回调中会更有意义。通常,这就是结果的最终处理

这是异步或事件驱动编程的一个示例


我希望这能说明问题

嗨,埃里克,非常感谢你的建议。是的,警报在回调中运行良好,不需要像您建议的那样延迟。然而,我的目标是在一个信息框中使用变量“Location3”的值(我真的不需要提醒)-如何将反向地理编码地址直接分配给“Location3”,而不需要延迟。再次感谢。您可以在回调中创建信息框。这是一种很好的编程风格。如果您必须更早地创建它,请使其不可见,然后让回调设置标签并使其可见。将始终存在延迟-您正在访问Internet!当您将大部分代码放在回调中时,您会发现这要容易得多。尽管如此,这比它的价值要麻烦得多,但是如果您想等到定义了location3之后,您需要一个循环来检查它是否仍然是未定义的。。。