使用node-mysql的节点承诺不会让应用程序终止

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

我为MySQL连接使用node-mysql库。

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

该function非常简单,并返回一个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()是asynchronous? 我尝试直接使用池,并使用一个单一的连接,而不是一个池。

发生这种情况是因为在所有连接closures之前,节点不会终止。

connection.release()replaceconnection.release() ,Node将成功终止。

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