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');
4

1 回答 1

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);
});
于 2013-06-23T14:03:45.050 回答