0

次のような非同期コードを持つNode.jsアプリケーションがあります。

var localvar1 = ...;
var localvar2 = ...;
var localvar3 = ...;
// do async database query
conn.query("select ...", function(err, res) {
    // fetch results asynchronously 
    res.fetchAll(function(err, rows) {
        if (rows.length == 0)   // no, data, fetch from external HTTP source
        {
            // fetch from Internet asynchronously 
            https.get(..., function() {
                // ok, got it, now save
                // I need values from original function here ***
                saveData(localvar1, localvar2, localvar3);
            });
        }
    });
);

localvar1-3の値を最も内側の関数に渡すための最良の方法は何ですか?

このためのライブラリを提案する場合は、上記で作成したコードで機能するサンプルコードを提供してください。

4

1 に答える 1

1

クロージャのおかげで、内部関数は外部関数またはモジュール自体で定義されたローカル変数にアクセスできるため、コールバックが呼び出されるのを待っている間に変更されない場合など、記述されたコードは機能します。 それらが変更された場合、コールバックには、リクエスト時に持っていた値ではなく、新しい値が表示されます。それが問題である場合は、それらを「トラップ」するための新しいクロージャーを作成します。 localvar1https.get()

https.get(..., (function(arg1, arg2, arg3) {
    return function() {
        saveData(arg1, arg2, arg3);
    }
})(localvar1, localvar2, localvar3));
于 2012-06-03T19:29:06.603 に答える