这个问题在这里已经有答案了:
循环内的javascript闭包-简单实用示例(44个答案)
两年前关门了。
这是我的密码
for (var x in items) {
var name = items[x].Name;
var hotelID = 1;
var sql = mysql.format('INSERT INTO Item(name, hotelID) VALUES(?, ?)', [name, hotelID]);
con.query(sql, function (err, result) {
if (err) {
throw err;
}
//Below x is updated by the loop.
console.log(item[x].Name);
});
我想知道 x
就在con.query()调用之前,但是在这里x由 for
在回调完成之前循环。我该怎么做??
1条答案
按热度按时间mspsb9vt1#
如您所知,在异步回调中,“x在回调完成之前由for循环更新”。
解决方案是使用es6语法
let
而不是var
. 这样声明的变量在回调中被正确地绑定到注册回调时的值,因为循环的每次迭代都会创建一个新变量,而不是使用单个var
它被提升到功能的顶部。