Возвращаемое значение из функции внутри функции - PullRequest
2 голосов
/ 08 апреля 2011

Я использую 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 Ответ

3 голосов
/ 08 апреля 2011

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 также является асинхронным.

...