我有这段代码:
var reverseGeo = function (latitude, longitude){
var address1;
var geocoder = new google.maps.Geocoder();
var location = new google.maps.LatLng(latitude, longitude);
geocoder.geocode({'latLng': location}, function(results, status){
if(status === google.maps.GeocoderStatus.OK){
if(results[0]){
address1 = results[0].formatted_address;
//console.log(address1);
}
else{
console.log(status);
}
}
});
console.log(address1);
};
注释掉的第一个console.log();
是正确的。它包含格式化的地址。底部的第二个console.log()
是undefined
。我在这里错过了什么?此外,我需要将此address1
变量返回到直接调用此脚本的父javascript文件。无论我尝试什么,我都会undefined
到处都有,geocoder.geocode();
答案 0 :(得分:1)
您在理解javascript和回调函数的异步功能时遇到问题
geocoder.geocode函数接受回调函数作为它的第二个参数。只要检索到地址,就会异步调用此函数。
最后你的console.log不起作用,因为在调用geocoder.geocode()函数之后,程序不会等待调用回调函数,而是立即执行下一条指令。在这种情况下,address1变量尚未填充。
您实际需要的是一个接受您的位置和回调函数的函数。像这样:
function getAddress(location, callback){
geocoder.geocode({'latLng': location}, function(results, status){
if(status === google.maps.GeocoderStatus.OK){
if(results[0]){
var address1 = results[0].formatted_address;
callback(address1);
}
}
});
}
现在,从您想要使用此地址的其他文件中,您可以像这样调用此函数:
var location = new google.maps.LatLng(latitude, longitude);
getAddress(location, function(address)
{
console.log(address);
});
此处,在检索到地址后,将调用您已定义接受该地址的函数,并且您可以使用地址变量。