2

我正在使用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但它根本不会返回任何东西。

我怎样才能让它返回值?

4

1 回答 1

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

于 2011-04-08T13:54:02.430 回答