我正在使用goMap
并且我正在尝试在其中添加一个函数,但是在调用函数时我无法返回它。如果我在函数中使用alert()
,它就会有我需要的值,应该返回。
getAddress: function(latlngcoords)
{
var goMap = this;
var input = latlngcoords;
var latlngStr = input.split(",", 2);
var lat = parseFloat(latlngStr[0]);
var lng = parseFloat(latlngStr[1]);
var latlng = new google.maps.LatLng(lat, lng);
var address;
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if(status == google.maps.GeocoderStatus.OK)
{
if(results)
{
address = results;
//alert(address); <-- works but
}
}
});
return address; // won't return at all?
},
通过执行:$.goMap.getAddress()
调用它,但在参数中具有纬度和经度。我需要它按return address
返回值,但它根本不会返回任何内容。
我如何才能让它返回值?
答案 0 :(得分:3)
geocode
是一个异步函数。当你调用它时启动,但就是这样。 (这就是它接受回调的原因。)所以你的getAddress
函数在回调设置address
之前返回。
您还需要让getAddress
函数接受回调,并以此方式返回结果,例如
getAddress: function(latlngcoords, callback)
// ^--- callback parameter
{
var goMap = this;
var input = latlngcoords;
var latlngStr = input.split(",", 2);
var lat = parseFloat(latlngStr[0]);
var lng = parseFloat(latlngStr[1]);
var latlng = new google.maps.LatLng(lat, lng);
var address;
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if(status == google.maps.GeocoderStatus.OK)
{
if(results)
{
address = results;
callback(address);
// ^--- call it with the result
}
}
});
},
当然,这意味着代码调用 getAddress
必须处理getAddress
也是异步的事实。