为什么创建一个新的繁琐连接会使我的程序无法完成?

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 程序尚未完成它试图做的任何事情当它看到计数不为零时,它不会自动退出。如果你想让它在那种情况下退出,你有三个选择:

  1. 您可以关闭不再使用的连接。
  2. 您可以在这些连接上调用 .unref() 以将它们从 node.js 保留的计数中删除。如果它是一个更高级别的东西,比如数据库连接,你可能需要在实际的套接字本身上调用 .unref() (数据库接口可能会或可能不会提供给你)或者数据库共享它自己的 .unref() 方法。
  3. 当你正在做你想做的所有事情时,你可以使用 process.exit() 手动退出你的进程。