将变量传递给Node.JS回调函数

时间:2013-11-10 14:36:12

标签: javascript node.js

我对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循环完成后发生变化。

我的问题是你可以将变量传递给回调函数吗?或者有人可以帮助我解决另一个问题。

提前致谢!

艾哈迈德

1 个答案:

答案 0 :(得分:3)

使用Array.forEach而不是使用for循环,通过这样做,你可以创建一个闭包,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
        });
    }
});