我正在尝试使用以下代码(看起来非常简单,但它不会像预期的那样工作)
请在这里帮助我:
function findLocationAddress(myLatLng)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
}
}
});
alert(formattedAddress);
return formattedAddress;
}
上述函数应该返回 formattedAddress 的新值,但它仍然返回“MY HOUSE ADDRESS”
非常感谢任何帮助。
答案 0 :(得分:3)
这里的问题是geocoder.geocode请求是异步的,并且您要同步返回值。尝试这样的事情:
function findLocationAddress(myLatLng)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
alert(formattedAddress);
// then do what you want (e.g. call a function) here
// e.g. doMyNextThing(formattedAddress);
}
}
});
}
以上代码示例经过测试和运行。
如果愿意,您还可以使用回调函数来定义找到地址后发生的事情(这将使函数更加可重用)
function findLocationAddress(myLatLng, callback)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
callback(formattedAddress);
}
}
});
}
findLocationAddress(myLatLng, function(formattedAddress){
// Do what you want with the result here
});
这可能很明显,但是注意results[1]
也会给你第二个结果,因为数组索引从0开始(这可能是预期的行为)