2014-02-16 1 views
-1

У меня есть эта яваскрипта функции геокодирования в LatLng объекта:Проблем с яваскриптом возвратных функциями

function geolocate_table(location) 
{ 
    geocoder.geocode({'latLng': location}, function(results, status){ 
    if(status == google.maps.GeocoderStatus.OK){ 
     if(results[0]) 
     { 
     console.log(results[0].formatted_address); 
     return(results[0].formatted_address); 
     } 
     else 
     return("Non disponibile"); 
    } 
    else 
    { 
     return("jasand"); 
    } 
    }); 
} 

Моей проблема заключается в том, что если я вызываю функцию от другого (например:

function test(latlng) 
{ 
    var street; 
    street=geolocate_table(latlng); 
    console.log(street); 
} 

Консоль журнал теста даст мне «неопределенный», даже если исходное значение в geolocate_table правильно оценено и зарегистрировано на консоли. Я что-то не так? Заранее благодарю за ваши ответы :)

ответ

0

Вы, вероятно, хотите использовать функцию обратного вызова в данном случае:

function geolocate_table(location, callback) 
{ 
    //do stuff, but for every return you would have 
    //something like 
    if (typeof callback == 'undefined') return whatever; 
    else return callback(whatever); 
} 

function test(latlng) 
{ 
    var street; 
    street=geolocate_table(latlng, function() { console.log(street); }); 
} 

Вы делаете это потому, что геокодер асинхронный - он будет продолжать выполнение остальной части программы, пока она ждет. С обратным вызовом вы даете ему следующий набор инструкций для выполнения после завершения асинхронной части.