如何从google api geocoder等异步回调中提取值?

时间:2016-01-25 17:34:19

标签: javascript google-maps asynchronous google-maps-api-3 google-geocoder

虽然问题与以前关于谷歌地图地理编码器的问题非常相似,但我无法找到符合我要求的正确解决方案。

function get_lat_lng(address) {
    var geocoder = new google.maps.Geocoder();
    console.log("Auto Complete Address : " + address);
    geocoder.geocode({'address': address}, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            //prints the location
            console.log("Results : " + results[0].geometry.location);
            //results[0].geometry.location;
            temp = results[0].geometry.location;
        } 
        else {
            alert('Geocode was not successful for the following reason: ' + status);
            temp = "";
        }
    });
    //does not get printed here
    console.log("Print Value: " + temp);
    return temp;    
}

这是我传递自动完成检索地址的函数。

目标:获取该特定地点的纬度和长坐标,我将在稍后使用距离矩阵功能。我不想做警报,我想把它们转储到变量中。我甚至试图从地理编码器块返回。

我知道地理编码器是异步的,并且值仅在回调中具有范围。我该如何检索它们?有没有办法等待地理编码器完成?

任何快速黑客都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

在上面的示例中,如果您等待的时间足够长(在谷歌地图API返回结果之后),那么' temp'将包含您需要的信息。

正如你所提到的,这本质上是异步的。您的console.log("Print Value: " + temp);将返回undefined。

您可以查看Promise,Observable或在异步函数体中调用函数。

function call_google_map( address )
{
    var geocoder = new google.maps.Geocoder();
    console.log( "Auto Complete Address : " + address );
    geocoder.geocode(
    {
        'address': address
    }, function ( results, status )
    {
        if ( status === google.maps.GeocoderStatus.OK )
        {
            handle_google_map_results( results[ 0 ].geometry.location );
        }
        else
        {
            alert( 'Geocode was not successful for the following reason: ' + status );
        }
    } );
}

function handle_google_map_results( results )
{
    //do your actual handling code here!
    console.log( results );
}