带有 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
的开发人员提供答案。
我正在使用 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
的开发人员提供答案。