我正在尝试查询mssql数据库以获取用户的密码,即发送post请求然后只在控制台中显示它。但我所做的承诺并没有按照我想要的方式工作,密码也没有加载到变量中。这是我的代码:
app.post('/test', function () {
let user = 'User';
let query = 'SELECT [Password] as password FROM [Table] where [User] = ' + SqlString.escape(user);
let password = (async function () {
try {
let pool = await sql.connect(dbConfig);
let result = await pool.request()
.query(querys);
console.dir(result.recordset[0].password) //Value here is OK
return result.recordset[0].password
} catch (err) {
// ... error checks
}
})()
console.log(password); //here I am getting "Promise { pending }"
});
我得到的结果是:Promise {pending} ' DatabasePassword'
答案 0 :(得分:2)
以下是将async / await
与快递一起使用的示例。
Express不会处理错误,但是你可以自己处理它们并不是什么大问题,你甚至可以将它包装成一个通用的错误处理程序来使事情更容易。
无论如何,这里修改的代码是在快递中使用async/await
。
app.post('/test', async function (req, res) {
try {
const user = 'User';
const query = 'SELECT [Password] as password FROM [Table] where [User] = ' + SqlString.escape(user);
const pool = await sql.connect(dbConfig);
const result = await pool.request()
.query(querys);
const password = result.recordset[0].password;
console.log(password);
res.end(password);
} catch (e) {
res.end(e.message || e.toString());
}
});
答案 1 :(得分:0)
标记为async
的函数会返回一个承诺。这是未来解决方案(值或错误)的包装器。返回一个promise(.then(..)
函数自动执行)的函数必须通过链接await
或“用”awaits
“解包”来解析为一个承诺。
在其代码async
和async
函数中某处的函数本身需要public void TestMethod1()
{
Assert.IsFalse(false);
}
。这意味着无论函数需要等待它还是将其解析为承诺等等。
答案 2 :(得分:0)
使用MongoDB数据库时遇到相同的问题,只是通过向函数添加关键字 async 来使发布请求异步:
app.post('/register', async function(req,res){
const myData = {username: req.body.name}
const doesUserExists = await UserModel.exists(myData)
})