连接mysql与节点js后,全局变量值显示为undefined

时间:2017-09-08 11:56:57

标签: mysql node.js

从节点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)?
         });
    });
}    

2 个答案:

答案 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变量才能在回调中使用,因为它们不会改变它们的值。