2013-06-23 226 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); 
});