Javascript 为什么wait即使在异步函数中也不起作用
我创建了一个通过电子邮件id搜索用户的函数。我使用wait在异步函数中调用该函数,并将返回值赋给或常量/变量,但在打印常量/变量时未定义Javascript 为什么wait即使在异步函数中也不起作用,javascript,node.js,promise,Javascript,Node.js,Promise,我创建了一个通过电子邮件id搜索用户的函数。我使用wait在异步函数中调用该函数,并将返回值赋给或常量/变量,但在打印常量/变量时未定义 function search(email) { sql = `SELECT email FROM users WHERE email = '${email}'`; db.query(sql, (err, res) => { if (err) { console.log(err);
function search(email) {
sql = `SELECT email FROM users WHERE email = '${email}'`;
db.query(sql, (err, res) => {
if (err) {
console.log(err);
}
else {
return res[0].email;
}
})
}
const auth = async (req, res, next) => {
try {
const token = req.header('Authorization').replace('Bearer', '');
const decoded = jwt.verify(token, 'catisdoguniversaltruth');
const user = await search(decoded._id);
console.log(user);
if (!user) {
throw new Error();
}
next();
}
catch (e) {
res.status(401).send("Not Authenticated, Please login");
}
};
module.exports = auth;
您需要将搜索作为承诺,而不是功能
等待承诺的解决
试试这个:
功能搜索电子邮件{
返回新的PromiseSolve,拒绝=>{
sql=`SELECT email FROM user,其中email='${email}'`;
db.querysql,err,res=>{
如果出错{
拒绝者;
}
否则{
解析[0]。电子邮件;
}
}
}
}
这将作为promise解决,auth将等待
您还可以将搜索构建为异步/等待承诺。只要您返回承诺解决,这并不重要。尽管此答案可以解决问题,但如果db.query api有返回承诺的重载,只需返回db.querysql也可以解决问题。@planet\u hunter感谢此插件。谢谢,这解决了我的问题!