gpt4 book ai didi

javascript - Express js - 数据库连接中的 Promise 待定

转载 作者:行者123 更新时间:2023-12-01 02:49:55 26 4
gpt4 key购买 nike

在我的登录表单中,我有一个选项允许我选择要连接的数据库,因此我尝试创建一个函数来执行此操作。

在数据库配置文件中,我有一个名为 setDB 的函数,该函数转到另一个名为 makeConnection 的函数,发送数据库名称作为参数并处理该函数的结果。

问题是第二个函数不返回任何结果,而是返回一个待处理的 promise

在此函数中,我有 3 个返回,这意味着将在 setDB 函数中处理错误,但这不起作用。

var mssql = require('mssql');

module.exports =
{
setDB: (req, res) =>
{
console.log('Prepare to connect to ' + req);
var result = makeConnection(req);
console.log(result);

if(result == 0)
{
res.send('Unknown database!');
}
else if(result == 1)
{
res.send('Error trying to connect!')
}
else if(result == 2)
{
res.send('Connection done!')
}
//return connection;
}
}

function makeConnection(dbname)
{
console.log('Start connection....');

return new Promise(function(resolve, reject) {
console.log('Database: '+ dbname);
var configs = {
Emp1: {
user: "us",
password: "pass",
server: "ip",
database: "Emp1"
},
Emp2: {
user: "us",
password: "pass",
server: "ip",
database: "Emp2"
}
};

var config = configs[dbname];
if(config == undefined)
{
return 0;
}

var connection = new mssql.Connection(config);
connection.connect(function(err)
{
if (err) {
console.log(err);
reject(err);
return 1;
} else {
resolve(connection);
console.log('Database Connected!');
return 2;
}
});
});
}

控制台打印:

enter image description here

更好的方法是什么?我想做一个连接,而不是在每个请求中都做一个连接...例如,它必须准备好同时被不同数据库中的 2 个用户使用。

哪种方法更好?

谢谢

最佳答案

makeConnection() 返回一个 Promise。当你打电话时很自然:

var result = makeConnection(req);
console.log(result);

这将导致记录一个待处理的 promise 。这才是应该做的。您的函数立即返回一个待处理的 promise ,一旦异步操作返回,该 promise 将得到解决。但在尝试记录结果之前,您不会等待它们。当结果准备好时,您需要使用 Promise 的 then() 函数来获取结果:

makeConnection(req)
.then(result => {
console.log(result);

if(result == 0)
{
res.send('Unknown database!');
}
else if(result == 1)
{
res.send('Error trying to connect!')
}
else if(result == 2)
{
res.send('Connection done!')
}
}

关于javascript - Express js - 数据库连接中的 Promise 待定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47039002/

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