gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:48:33 27 4
gpt4 key购买 nike

我试图用 Promise 包装繁琐的 MSSQL 库 API,使其更易于使用,但是每当我创建一个新的 Promise 来创建新的繁琐的 SQL 连接时,程序永远不会退出,而且我很难弄清楚为什么。

这是我的真实代码的精简版本,仅包含导致问题所需的最低限度。

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}`));

连接成功后,我会得到以下输出:
新康涅狄格州前
发布新的连接
康恩:已解决
如果我取消注释行 const conn = new Connection(config); ,那么我会得到完全相同的输出,但程序永远不会退出!

我正在使用 tedious v2.6.4,并使用节点 v8.11.3 运行该程序。

最佳答案

Node.js 跟踪开放的网络连接、运行的计时器和其他类似的事情,这可能表明您的 Node.js 程序尚未完成它试图执行的任何操作,并且当它看到计数不为零时,它不会自动退出。如果您希望它在这种情况下退出,您有三个选择:

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

关于javascript - 为什么创建一个新的繁琐连接会使我的程序无法完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com