2014-02-16 21 views
-1

我有這個JavaScript函數地址解析爲一個經緯度對象:用JavaScript回報職能轉變問題

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); }); 
} 

你這樣做是因爲地理編碼器是異步的 - 雖然它等待它會繼續在程序的其餘部分的執行。通過回調,可以在完成異步部分之後爲其提供下一組指令。