mysql - Node mysql顺序查询执行

标签 mysql node.js node-mysql

我正在尝试获取一些结果并根据这些结果进行进一步处理,但我无法继续按顺序处理它,

var sql = query1;

    con.query(sql, function (err, results) {
      if (err) throw err;
     //  ids => 5,2,3,4
      for (i = 0; i < results.length; i++) {

        target_user = results[i].ID

        var sql = "DELETE QUERY";

        con.query(sql, function (err) {
          if (err) throw err;
          console.log(target_user)

          var sql = "INSERT QUERY";
          console.log(sql)
          con.query(sql, function (err) {
            if (err) throw err;

          })
        })


      }
    })

上面的代码是异步运行的,我期望的是这样一个循环的输出

// "DELETE QUERY";
//5
// "INSERT QUERY";
// "DELETE QUERY";
//2
// "INSERT QUERY";

等等..

但我得到的是

// "DELETE QUERY";
//5
// "DELETE QUERY";
//5 //not fetching the next array val
// "INSERT QUERY";
// "INSERT QUERY";

非常感谢任何帮助。


编辑

从答案中我更新了这样的代码

现在代码是这样的

 aysnc.forEach(results, function(elem, callback){
target_user = elem.id
   console.log('out')
                    console.log(target_user)
                    con.query(sql, function (err) {
                      if (err) throw err;
                      console.log('in')
                    console.log(target_user)
})
})

奇怪的事情发生了,输出是

out
5
in
5
out
2
in
5 //when it is supposed to be 2

最佳答案

您仍然可以以不同的方式使用 npm 模块 async

const mysql = require('mysql');
const async = require('aynsc');

var db; //database variable
async.series([
  //creates DB connection and connects
  function(callback){
    db = mysql.createConnection(DB_INFO); //DB_INFO is an Object with information on the BD to be connected

    db.connect(function(err){
      if (err) {
        console.error('error connecting: ' + err.stack);
        return;
      }
      callback(); //goes to the next function
    }); 
  },

  //performs the Query 1
  function(callback){
    db.query('QUERY1', function(){
      callback(); //goes to the next function
    });    
  },

  //performs the Query 2 only after Query 1 is finished
  function(callback){
    db.query('QUERY2', function(){
      db.end(); //closes connection
      callback();
    });    
  }
]);

关于mysql - Node mysql顺序查询执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45936021/

相关文章:

php - sql插入具有层次结构的一堆记录

javascript - Node 纤维中的运行与产量之间有什么区别

mysql - MySQL 中的 ER_NO_DEFAULT_FOR_FIELD(nodejs 休息请求)

php - 运行 PHP - 使用 Node 实例和端口时

javascript - 引用误差 - Angular 未定义

mysql - 如何用node-mysql查询并写出结果?

java - mysql 上(ER_QUERY_INTERRUPTED)的处理策略

mysql - Zend 分页器运行速度非常慢 1.12

php - 文件/图像复制

PHP - 尝试根据是否选中复选框来更新多个 mysql 值