为什么创建一个新的繁琐连接会使我的程序无法完成?
Why does creating a new tedious connection keep my program from finishing?
我正在尝试用 promises 包装繁琐的 MSSQL 库 API连接程序永远不会退出,我无法找出原因。
这是我的真实代码的精简版本,其中包含导致问题所需的最低限度。
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 的程序。
Node.js 跟踪打开的网络连接、运行 计时器和其他类似的东西,这可能表明您的 node.js 程序尚未完成它试图做的任何事情当它看到计数不为零时,它不会自动退出。如果你想让它在那种情况下退出,你有三个选择:
- 您可以关闭不再使用的连接。
- 您可以在这些连接上调用
.unref()
以将它们从 node.js 保留的计数中删除。如果它是一个更高级别的东西,比如数据库连接,你可能需要在实际的套接字本身上调用 .unref()
(数据库接口可能会或可能不会提供给你)或者数据库共享它自己的 .unref()
方法。
- 当你正在做你想做的所有事情时,你可以使用
process.exit()
手动退出你的进程。
我正在尝试用 promises 包装繁琐的 MSSQL 库 API连接程序永远不会退出,我无法找出原因。
这是我的真实代码的精简版本,其中包含导致问题所需的最低限度。
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 的程序。
Node.js 跟踪打开的网络连接、运行 计时器和其他类似的东西,这可能表明您的 node.js 程序尚未完成它试图做的任何事情当它看到计数不为零时,它不会自动退出。如果你想让它在那种情况下退出,你有三个选择:
- 您可以关闭不再使用的连接。
- 您可以在这些连接上调用
.unref()
以将它们从 node.js 保留的计数中删除。如果它是一个更高级别的东西,比如数据库连接,你可能需要在实际的套接字本身上调用.unref()
(数据库接口可能会或可能不会提供给你)或者数据库共享它自己的.unref()
方法。 - 当你正在做你想做的所有事情时,你可以使用
process.exit()
手动退出你的进程。