gpt4 book ai didi

javascript - 第一次连接失败时如何在 Node.js 中重试数据库连接?

转载 作者:行者123 更新时间:2023-12-01 00:52:21 24 4
gpt4 key购买 nike

我正在将 SQL Server 与 Node.js 结合使用。当第一次尝试连接失败时,Node.js 不会重新尝试连接。我正在使用 setTimeout() 定期尝试,直到连接为止。

const poolPromise = new sql.ConnectionPool(config.db);
poolPromise
.connect()
.then(pool => {
console.log('Connected to MSSQL');
return pool;
})
.catch(err => {
if (err && err.message.match(/Failed to connect to /)) {
console.log(new Date(), String(err));

// Wait for a bit, then try to connect again
setTimeout(function() {
console.log('Retrying first connect...');
poolPromise.connect().catch(() => {});
}, 5000);
} else {
console.error(new Date(), String(err.message));
}
});

上面的代码尝试连接,失败并尝试第二次,但第三次、第四次等不再继续。

最佳答案

我写了这个有效的小片段。我将连接部分包装到一个函数中,然后使用递归函数调用它。

在此示例中,您将看到无穷大。

function sql() {
this.connect = function() {
return new Promise((resolve, reject) => reject("error connecting"));
}
}


function connect() {
return new Promise((resolve, reject) => {
// const poolPromise = new sql.ConnectionPool("config.db");
const poolPromise = new sql();
poolPromise
.connect()
.then(pool => {
console.log("connected");
resolve(pool);
})
.catch(err => {
console.error(err);
reject(err);
});
});
}

function establishConnection() {
var a = connect();
a.then(a => console.log("success"))
.catch(err => {
console.error("Retrying");
// I suggest using some variable to avoid the infinite loop.
setTimeout(establishConnection, 2000);
});
};

establishConnection();

关于javascript - 第一次连接失败时如何在 Node.js 中重试数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876141/

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