虽然问题与以前关于谷歌地图地理编码器的问题非常相似,但我无法找到符合我要求的正确解决方案。
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;
}
这是我传递自动完成检索地址的函数。
目标:获取该特定地点的纬度和长坐标,我将在稍后使用距离矩阵功能。我不想做警报,我想把它们转储到变量中。我甚至试图从地理编码器块返回。
我知道地理编码器是异步的,并且值仅在回调中具有范围。我该如何检索它们?有没有办法等待地理编码器完成?
任何快速黑客都会受到高度赞赏。
答案 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 );
}