【发布时间】:2020-12-18 18:07:58
【问题描述】:
我阅读了How do I return the response from an asynchronous call? 的答案。我仍然有点困惑为什么这段代码不能正常工作。 bool 正在返回“Promise {pending}”,它不应该返回,因为我已将 await 关键字放在那里。
db.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;
}
【问题讨论】:
-
bool绝对不是承诺。但是,async function调用validateUser(…)将返回一个未来返回布尔值的承诺。相反,您需要将await放在您实际想要使用承诺结果的调用中。 -
不要使用
throw err,而是使用reject(err)!另外,那是什么数据库库?您可能根本不需要new Promise包装器。
标签: javascript node.js