2014-09-11 133 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?