Google反向地理编码返回变量

时间:2016-07-09 21:46:10

标签: javascript variables undefined execution

我有这段代码:

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

1 个答案:

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

此处,在检索到地址后,将调用您已定义接受该地址的函数,并且您可以使用地址变量。