2014-09-11 189 views
1

這是該函數應該返回名稱:如何從回調中返回值?

function getLookupNameById(lookup_id, callback){ 
    var name = ""; 
    if(lookup_id != 0) { 
     updateData({ 
      lookup_id: lookup_id, 
      callback: function(status, data){ 
       if(status && data.values){ 
        values = data.values; 
        name = somevalue; 
        return name; //returns undefined 
       } 
       else{ 
        console.log('Empty'); 
       } 
       if(callback) 
        callback(); 
      } 
     }); 
    } 
    return name; //returns empty string 
} 

這是怎麼了我是從另一個腳本調用該函數:

var name = instanceofscript.getLookupNameById(parameter); 

我應該如何返回值?

+0

這裏是[Deferred](http://api.jquery.com/category/deferred-object/)和SO中的很多相同的問題。 – Regent 2014-09-11 06:30:10

+0

你沒有傳遞'callback'參數。 – Barmar 2014-09-11 06:30:12

+0

它將取決於'updateData' ...它是異步還是同步 – 2014-09-11 06:30:53

回答

2

當您使用異步函數時,您不能return任何東西從他們,因爲他們不運行,直到調用者返回後。所有依賴返回數據的東西都必須在回調函數中完成。

callback功能應該得到name作爲參數:

if (callback) { 
    callback(name); 
} 

然後你需要調用它像這樣:

instanceofscript.getLookupNameById(parameter, function(name) { 
    console.log(name); 
}); 

這是基本相同,使用AJAX,故見How do I return the response from an asynchronous call?