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);
});

在这里,在检索到地址后,您定义的接受地址的函数将被调用,地址变量将可供您使用。