我对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循环完成后发生变化。
我的问题是你可以将变量传递给回调函数吗?或者有人可以帮助我解决另一个问题。
提前致谢!
艾哈迈德
答案 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
});
}
});