Javascript 获取插入日期的次数,以了解Node.js中最后一次for循环迭代

Javascript 获取插入日期的次数,以了解Node.js中最后一次for循环迭代,javascript,mysql,node.js,Javascript,Mysql,Node.js,我想在数据库中的另一行插入stockid,我正在使用for循环。我还想知道最后一次迭代,但由于javascript的异步性,我很难让它正常工作。当前输出为j仅增加1,打印4次。我将感谢任何帮助或建议。谢谢 var order_id = 827283383; var stockid = [1,2,3,4]; for(i = 0; i < stockid.length; i++) { db.query("insert into order_detail( order_id, s

我想在数据库中的另一行插入stockid,我正在使用for循环。我还想知道最后一次迭代,但由于javascript的异步性,我很难让它正常工作。当前输出为
j
仅增加1,打印4次。我将感谢任何帮助或建议。谢谢

var order_id = 827283383;
var stockid = [1,2,3,4];
for(i = 0; i < stockid.length; i++)  {
  db.query("insert into order_detail( order_id, stock_id) values ('" + order_id + "','" + stockid[i] + "') ;",  function (err, rs) {
    var j = 0;
    if (err) {
      console.log(err);
    }
    else{
      j++; // aimed to use as a counter 
      console.log(j);  
    }
    if(j < stockid.length-1){ //aimed to get last iteration
      console.log('This is the last row');
    }
  });  
}

正如@Tapler在评论中提到的,您的j在每次迭代中都设置为0。像

var order_id = 827283383;
var stockid = [1,2,3,4];
var j = 0;
for(i = 0; i < stockid.length; i++)  {
  db.query(`insert into order_detail( order_id, stock_id) values (${order_id},${stockid[i]})`,  function (err, rs) {
    if (err) {
      console.log(err);
    }
    else{
      j++; // aimed to use as a counter 
      console.log(j);  
    }
    if(j < stockid.length-1){ //aimed to get last iteration
      console.log('This is the last row');
    }
  });  
}
var order\u id=827283383;
var stockid=[1,2,3,4];
var j=0;
对于(i=0;i

另外,请阅读有关准备好的语句和SQL注入以避免对数据库的攻击。这很容易受到数据库攻击。

正如@Tapler在评论中提到的,您的j在每次迭代中都设置为0。像

var order_id = 827283383;
var stockid = [1,2,3,4];
var j = 0;
for(i = 0; i < stockid.length; i++)  {
  db.query(`insert into order_detail( order_id, stock_id) values (${order_id},${stockid[i]})`,  function (err, rs) {
    if (err) {
      console.log(err);
    }
    else{
      j++; // aimed to use as a counter 
      console.log(j);  
    }
    if(j < stockid.length-1){ //aimed to get last iteration
      console.log('This is the last row');
    }
  });  
}
var order\u id=827283383;
var stockid=[1,2,3,4];
var j=0;
对于(i=0;i

另外,请阅读有关准备好的语句和SQL注入以避免对数据库的攻击。这很容易受到数据库攻击。

我建议您向数据库发出提示。
db.query

const { promisify } = require('util');

const query = promisify(db.query.bind(db));

Promise.all(stockid.map(id => query("insert into order_detail( order_id, stock_id) values ('" + order_id + "','" + id + "') ;")))
    .then(console.log)
    .catch(console.error);

我建议您承诺
db.query

const { promisify } = require('util');

const query = promisify(db.query.bind(db));

Promise.all(stockid.map(id => query("insert into order_detail( order_id, stock_id) values ('" + order_id + "','" + id + "') ;")))
    .then(console.log)
    .catch(console.error);

您正在为每个查询调用将
j
重新初始化为零。错过了这个,我感到很尴尬。非常感谢您为每个查询调用将
j
重新初始化为零。错过了这个,我感到很尴尬。谢谢,我也知道sql注入,我只是在测试阶段。感谢您提及此事并提供解决方案。非常感谢。我也知道sql注入只是在一个测试阶段。感谢您提及此事并提供解决方案。非常感谢。这个看起来更酷。但是我可以在插入后立即使用插入的数据吗?我想在插入后立即
选择插入的数据。然后你需要使用它,在
然后
中,数据立即可用,而它不在你的代码中,因为你不需要等待异步查询返回。非常感谢。我一定会考虑使用这个。谢谢您的帮助。很抱歉再次打扰您,当我在
中选择数据,然后
时,只返回一个输出(第一个插入的数据)。如果您有任何建议,我会在我的问题中添加我的代码。谢谢。让我们看看。这个看起来更酷。但是我可以在插入后立即使用插入的数据吗?我想在插入后立即
选择插入的数据。然后你需要使用它,在
然后
中,数据立即可用,而它不在你的代码中,因为你不需要等待异步查询返回。非常感谢。我一定会考虑使用这个。谢谢您的帮助。很抱歉再次打扰您,当我在
中选择数据,然后
时,只返回一个输出(第一个插入的数据)。如果您有任何建议,我会在我的问题中添加我的代码。谢谢,让我们来。