从函数内部的函数返回值

时间:2011-04-08 13:46:50

标签: jquery jquery-plugins return-value return nested-function

我正在使用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 个答案:

答案 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也是异步的事实。