NodePromise与nodemysql不让应用程序终止

Node Promise with node-mysql does not let application terminate

本文关键字:应用程序 终止 nodemysql NodePromise      更新时间:2023-09-26

我使用Node Promise(本机实现)来链接MySQL查询。

我使用node-mysql库进行MySQL连接。

var mysql = require('mysql');
var db = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'database'
});

该函数非常简单,并返回Promise:

function query(sql, repl) {
    return new Promise(function(resolve, reject) {
        db.getConnection(function(err, connection) {
            if (err)
                reject(err);
            else {
                connection.query(sql, repl, function(err, rows) {
                    connection.release();
                    if (err)
                        reject(err);
                    else
                        resolve(rows);
                });
            }
        });
    });
}

但是,当我运行它时,应用程序永远不会终止。

query('SELECT * FROM `subscriptions` LIMIT 5', []).then(function(rows) {
    console.log(rows);
}, function(err) {
    console.log('MySQL error: ' + err);
});

之后并没有更多的代码,但节点仍然没有终止,即使promise得到了解决。

可能是因为connection.release()是异步的吗?我尝试直接使用池,并使用一个单独的连接而不是池。

之所以会发生这种情况,是因为在关闭所有连接之前,Node不会终止。

替换connection.release()通过connection.destroy()节点将成功终止。

感谢node-mysql的开发人员给出的答案。