1

我对 Node.JS 很陌生,我正在尝试构建一个应用程序,但我遇到了一些我似乎无法找到解决方案的问题。我在谷歌上花了很多时间,但没有运气。

下面是一个小片段,说明了我正在尝试做的事情。

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 in 循环使用 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 回答