我正在使用 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()
,但参数中包含纬度和经度。我需要它通过返回地址
返回值,但它根本不会返回任何内容。
我怎样才能让它返回值?
最佳答案
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
也是异步的这一事实。
关于jquery - 从函数内部的函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5596026/