我正在尝试用承诺简化包装繁琐的MSSQL库API,但是每当我创建一个创建新繁琐的SQL连接的新Promise时,程序就永远不会退出,并且我很难找出原因。
这是我的真实代码的精简版,其中包含导致该问题的最低要求。
const {Connection} = require('tedious');
const connect = () =>
new Promise((resolve, reject) =>
{
const config = {
userName: '----',
password: '----',
domain: '----',
server: '----',
options: {
database: '----',
port: 1805,
connectTimeout: 6000,
readOnlyIntent: true,
rowCollectionOnRequestCompletion: true,
encrypt: true
}
};
console.log('Pre new conn');
// const conn = new Connection(config);
console.log('Post new conn');
resolve('Resolved');
});
connect()
.then(conn => console.log(`conn: ${conn}`))
.catch(error => console.log(`Err: ${error}`));
连接成功后,我得到以下输出:
Pre new conn
Post new conn
conn: Resolved
如果我取消注释行const conn = new Connection(config);
的注释,则会得到完全相同的输出,但是该程序永远不会退出!
我正在使用乏味的v2.6.4,并且正在使用节点v8.11.3运行该程序。
答案 0 :(得分:2)
Node.js跟踪开放的网络连接,运行计时器以及类似的事情,这可能表明您的node.js程序尚未完成其尝试执行的工作,并且发现计数为非零时,它不会自动退出。如果您希望它在这种情况下退出,则有三种选择:
.unref()
,以将它们从count.js保留的计数中删除。如果是诸如数据库连接之类的更高级别的事情,则可能需要在实际套接字本身上调用.unref()
(数据库接口可能会或可能不会为您提供),或者数据库共享它自己的{{1 }}方法。.unref()
手动退出过程。