1

私はNode.JSを初めて使用し、アプリを構築しようとしていますが、解決策が見つからないように見えるいくつかの問題に直面しています。私は運が悪かったので、かなりの時間を Google で過ごしました。

以下は、私がやろうとしていることを示す小さなスニペットです。

mysql.query('SELECT * FROM leads', function(err, res){
    for(x in res){
        id = res[x];

        mysql.query('SELECT FROM survey WHERE lead_id = ?', [id], function(x, res){
            // I want to access the id variable here but since this is in a 
            // callback the id variable could've been changed by now

            // AND THIS DOES'T ALWAYS RETURN SOMETHING OR I COULD'VE 
            // JUST USED THE LEAD_ID IN THE RETURNED DATASET
        });
    }
});

コールバック内でその変数にアクセスしたいidのですが、ノードの非同期の性質により、最初のコールバックが返される前に for ループの実行が終了するため、変数が変更されてしまいます。

私の質問は、変数をコールバック関数に渡すことができますか? または、誰かが別の解決策を手伝ってくれますか。

前もって感謝します!

アフマド

4

1 に答える 1

3

ループ内で for を使用する代わりに、Array.forEach を使用します。これにより、id 変数がキャプチャされたクロージャが作成されます。

mysql.query('SELECT * FROM leads', function(err, res){
   res.forEach(function(x) {
        var id = x; //Captured in the closure of the mysql.query below

        mysql.query('SELECT FROM survey WHERE lead_id = ?', [id], function(x, res){
            //Do stuff with id
        });
    }
});
于 2013-11-10T14:42:16.283 に答える