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

非同期関数のように見えます。非同期プログラミングの要点は、値を返さないことです。結果を消費するコールバックにサブスクライブします。値を返す場合、関数の呼び出し元はこの値が利用可能になるまで待機する必要があるためです。そして、この発信者をフリーズさせてしまうので、待つのは良くありません。

そのため、この関数のコンシューマーが非同期操作の結果を取得できるようにするコールバック パラメーターを親関数に提供することが 1 つの可能性です。

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 に答える