带有 node-mysql 的 Node Promise 不会让应用程序终止

Node Promise with node-mysql does not let application terminate

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

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

var mysql = require('mysql');

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

函数非常简单并且returns一个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);
});

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

难道是因为connection.release()是异步的?我尝试直接使用池并使用一个连接而不是池。

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

替换 connection.release() 经过 connection.destroy() Node 将成功终止。

感谢 node-mysql 的开发人员提供答案。