【问题标题】: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 返回值,但它根本不会返回任何内容。

我怎样才能让它返回值?

【问题讨论】:

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


    【解决方案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
    • 哦,忘记保存更改了。谢谢你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2022-11-11
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多