我正在尝试将地址存储在变量(javascript)中的纬度,经度中。我创建了一个回调函数(在阅读了很多帖子后),代码如下。现在我想将地址存储在名为location3的变量中。
奇怪的是,对于分配了location3之后的警报,它是未定义的。但如果在300毫秒后查看它,那么它会给出正确的价值。我想立即将地址分配给location3。欢迎任何建议。
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
答案 0 :(得分:0)
这里要抓住的想法是,geocode()(回调函数)的第二个参数不会立即被调用,而是仅在从Google收到结果之后。同时,已发布请求的函数codeLatLng1()将控制权返回给调用者。在你的程序中,这意味着接下来会发生第一个警报(),然后是Google等待你的一段等待时间,调用回调,依此类推。
同样,设置location3的匿名回调仅在收到结果时执行 - 而不是在codeLatLng1返回之前执行。
将警报置于匿名回调中会更有意义。通常情况下,这是结果的最终处理。
这是异步或事件驱动编程的一个例子。
我希望这说清楚!