[英]Promise with await returning pending
我阅读了如何从异步调用返回响应? . 我仍然有点困惑为什么这段代码不能正常工作。 bool 正在返回“Promise {pending}”,它不应该返回,因为我已经将 await 关键字放在那里。
数据库.js:
async function validateUser(username, password) {
var sql = "SELECT * FROM users WHERE username = ? AND password = ?";
var values = [username, password];
let promise = new Promise((resolve, reject) => {
con.query(sql,values, function(err, results) {
if (err) throw err;
if (results.length > 0){
console.log('true');
resolve("true");
}
else{
console.log('false');
reject("false");
}
})
});
let bool = await promise; // wait until the promise resolves (*)
return bool;
}
async
函数总是返回 promise。因此,如果您尝试记录validateUser
的返回值,它会给您一个Promise
。
您从async
function 返回的任何非承诺值都隐式包装在Promise
中。
您可以将 .then .then()
function 链接到async
function 调用以获取已解析的值。
validateUser(username, password)
.then(value => console.log(value))
.catch(error => console.log(error));
查看您的代码,您似乎根本不需要async
function。 您可以将validateUser
设置为常规 function,然后仅从validateUser
function 返回 promise。
function validateUser(username, password) {
var sql = "SELECT * FROM users WHERE username = ? AND password = ?";
var values = [username, password];
return new Promise((resolve, reject) => {
con.query(sql,values, function(err, results) {
if (err) reject(err);
if (results.length > 0) resolve("true");
else reject("false");
})
});
}
您还可以检查您正在使用的数据库库是否提供基于Promise
的 Promise。如果是,您可以只使用async-await
语法而不是使用回调版本来查询数据库并将其包装在Promise
构造函数中。
您还需要await validateUser(...)
; 否则你会得到最终会解决的 promise 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.