Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调试打印未按顺序进行_Javascript_Node.js - Fatal编程技术网

Javascript 调试打印未按顺序进行

Javascript 调试打印未按顺序进行,javascript,node.js,Javascript,Node.js,在下面的代码中,我注意到一个让我困惑的异常现象。打印字符串entryname在somestr打印字符串之前执行。我能知道为什么会这样吗 var somestr = ""; con.query( 'SELECT name,areaid, panellabel,voltageid,installationtypeid from installation, (SELECT companyid from building where name="' + req.body.location +

在下面的代码中,我注意到一个让我困惑的异常现象。打印字符串entryname在somestr打印字符串之前执行。我能知道为什么会这样吗

var somestr = "";
con.query(
  'SELECT name,areaid, panellabel,voltageid,installationtypeid from installation, (SELECT companyid from building where name="' +
    req.body.location +
    '")as company where installation.id=company.companyid',
  function(err, rows, fields) {
    if (err) throw err;
    var output = JSON.parse(JSON.stringify(rows));
    var arr = [];
    console.log(rows);
    output.forEach(function(entry) {
      console.log("entryname is " + entry.name);
      somestr =
        somestr +
        "<TR><TD>" +
        entry.name +
        "<TD>" +
        entry.areaid +
        "<TD>" +
        entry.areaid +
        "<TD>" +
        entry.panellabel +
        "<TD>" +
        "<TD>" +
        entry.voltageid +
        "<TD>" +
        entry.installationtypeid;
      console.log(somestr);
    });
  }
);
console.log("somestr is " + somestr + "end somestr");
tablehead = tablehead + somestr;
console.log(somestr);
res.send(tablehead);

NodeJs本质上是Aysnc,如果异步任务正在执行,NodeJs将把该代码推送到堆栈并执行下一个可用语句

同样的事情也在这里发生

con.query('SELECT name,areaid, panellabel,voltageid,installationtypeid from installation, (SELECT companyid from building where name=\"' + req.body.location + '\")as company where installation.id=company.companyid', function (err, rows, fields) {
  ///
});
在这一部分执行db I/O时,NodeJs将其推送到堆栈并执行下一个console语句


现在,当db调用完成时,它将执行相应的块。log'entryname为'+entry.name

您需要首先了解node.js的异步性质。查询代码中存在SQL注入漏洞。按照我的理解,在回调函数中检索值可以解决我的问题。@AKX,感谢您指出SQL注入漏洞。我将使用参数化查询来修复它们。