从节点js连接mysql后,全局变量值显示未定义的内部连接。我们应该怎么做才能给出正确的值?
var a = "100000";
var con = mysql.createConnection({
host: "xyz.com",
user: "db",
password: "db",
database: "truck"
});
for (var i = 0; i < a.length; i++)
{
var p = a.substring(0,1);//p is 1 now
con.connect(function(err) {
con.query("SELECT * FROM at_device_fault", function (err, result, fields) {
console.log(p);//here p is undefined here what should do for correct value(1)?
});
});
}
答案 0 :(得分:0)
最后使用let
解决了这个问题var a = "100000";
var con = mysql.createConnection({
host: "xyz.com",
user: "db",
password: "db",
database: "truck"
});
for (var i = 0; i < a.length; i++)
{
let p = a.substring(0,1);//p is 1 now
con.connect(function(err) {
con.query("SELECT * FROM at_device_fault", function (err, result, fields) {
console.log(p);//here p is 1 now
});
});
}
答案 1 :(得分:0)
我认为你不是在问“为什么”。函数,其中p未定义,是一个“回调”,它将在异步查询最终完成后执行。执行不会等待它完成,它宁愿将它提供给事件循环,并且会不加思索地跳转到下一次迭代。在查询完成后最终执行回调时,无法确定p的值是什么。因此,只有const变量才能在回调中使用,因为它们不会改变它们的值。