繁体   English   中英

节点JS-MySQL-在查询的回调内部进行查询

[英]Node JS - mysql - querying inside of a callback of a query

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

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();

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

您的问题的解释:

js是逐行执行的。 依次为:

  1. connection.connect()
  2. connection.query(params ...)(异步I / O,放置回调)
  3. connection.end()

然后,当对数据库的查询完成时,将执行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();
    });
});

是的,您可以在回调中发出查询。 您收到错误消息是因为connection.end调用不在回调中。 现在,在第一个回调触发之前,它将被调用。

我尝试用于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
       });
    });
}
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM