Google 反向地理编码 return 变量
Google reverse geocode return variable
我有这个代码:
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 文件。不管我尝试什么,除了 geocoder.geocode();
中的本地,我到处都能得到 undefined
您在理解 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);
});
在这里,在检索到地址后,您定义的接受地址的函数将被调用,地址变量将可供您使用。
我有这个代码:
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 文件。不管我尝试什么,除了 geocoder.geocode();
undefined
您在理解 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);
});
在这里,在检索到地址后,您定义的接受地址的函数将被调用,地址变量将可供您使用。