使用node-mysql的Node Promise不允许应用程序终止

时间:2016-01-08 06:00:48

标签: javascript mysql node.js es6-promise

我正在使用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);
});

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

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

1 个答案:

答案 0 :(得分:2)

这是因为Node在所有连接都关闭之前不会终止。

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

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