Node JS - mysql - 在查询回调中查询

时间:2015-07-26 04:31:48

标签: javascript mysql node.js

我想知道是否有可能在另一个查询的回调中查询数据库。例如,

connection.connect();
connection.query(query, [param1, param2], function(err, rows, fields) {
    // do something
    connection.query(new_query, function(err, rows, fields) {
         // do something else
    });
});
connection.end();

我在此代码的第4行收到Error: Cannot enqueue Query after invoking quit.错误。所以我想知道这是否可行。

3 个答案:

答案 0 :(得分:2)

您的问题说明:

js逐行执行。按顺序,那将是:

  1. connection.connect()
  2. connection.query(params ...)(async i / o,放置回调)
  3. connection.end()
  4. 然后,当对数据库的查询完成时,执行2.中的回调,但3.之前执行,结束连接。所以在回调中的那一点,你不能再进行另一个查询,因为连接已经关闭。

    <强>解决方案:

    connection.end()应位于最后一个嵌套查询

    固定代码:

    connection.connect();
    connection.query(query, [param1, param2], function(err, rows, fields) {
        // do something
        connection.query(new_query, function(err, rows, fields) {
             // do something else
             connection.end();
        });
    });
    

答案 1 :(得分:2)

是的,您可以在回调中发出查询。您收到错误是因为connection.end调用不在回调中。你现在拥有它的地方,它将在第一次回调激活之前被调用。

答案 2 :(得分:0)

我尝试用于connection.release();

pool.getconnection(function(err,connection){
if(!err)
{
    connection.release();//after this perform query operation
    connection.query(query, [param1, param2], function(err, rows, fields) {
    // do something
       connection.query(new_query, function(err, rows, fields) {
         // do something else
       });
    });
}
})