【发布时间】:2023-03-20 12:32:01
【问题描述】:
我正在尝试查询 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 } '数据库密码'
【问题讨论】:
-
let password = await (async function() {...} ())当您使用async创建承诺时,您需要为它使用await -
视为您使用
async,只需将app.post标记为async方法,然后您就可以从一开始就使用await..app.post('/test', async function () {不需要匿名函数。 -
这仅在使用的 Web 框架支持异步中间件处理程序时才有效。 Express 不支持,但我认为。 Koa 确实如此。
-
它与
express一起工作正常。Promise 被忽略,你只需处理里面的错误,..我会发布一个例子.. -
不过,使用 Koa,您实际上可以将异步回调分配为中间件,而不必像这样进行显式错误捕获,并且通用错误处理中间件将为您处理它,因为 Koa 本身支持 async/await。
标签: javascript node.js ecmascript-6 promise