2013-06-23 229 views
2

我有一个函数声明如下。我如何从函数/匿名函数内返回一个值给父项。如何从回调函数返回值

下面是代码,我试图去努力

LB.getData = function(key) { 
    if(!key) return; 

    appAPI.db.async.get(key, function(value){ 
     data = (value === null) ? null : JSON.parse(value); 
     return data 
    }); 
}; 


var myData = LB.getData('user'); 

回答

7

看起来像一个异步函数。异步编程的要点是你不返回值。您订阅回调,这是您消费结果的地方。因为如果你返回值,这意味着你的函数的调用者将不得不等待,直到这个值可用。等待是不好的,因为你会冻结这个来电者。

所以,一种可能性是提供一个回调参数父功能,将允许该功能的消费者得到的异步操作的结果:

LB.getData = function(key, callback) { 
    if(!key) return; 

    appAPI.db.async.get(key, function(value) { 
     var data = (value === null) ? null : JSON.parse(value); 
     // invoke the callback and pass the results to it 
     callback(data); 
    }); 
}; 

,然后简单地消耗时提供的回调函数父母:

LB.getData('user', function(data) { 
    // use the data here 
    alert(data.someProperty); 
});