从函数内部的函数返回值
Posted
技术标签:
【中文标题】从函数内部的函数返回值【英文标题】:Returning value from function inside a function 【发布时间】:2011-08-01 13:09:00 【问题描述】:我正在使用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
返回值,但它根本不会返回任何内容。
我怎样才能让它返回值?
【问题讨论】:
【参考方案1】: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
也是异步的事实。
【讨论】:
所以没有办法以某种方式返回数据? 萤火虫说callback is not a function
哦,忘记保存更改了。谢谢你。 :)以上是关于从函数内部的函数返回值的主要内容,如果未能解决你的问题,请参考以下文章
在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]