gpt4 book ai didi

javascript - 为什么即使在 async 函数中使用时,await 也不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:51 26 4
gpt4 key购买 nike

我做了一个通过电子邮件 ID 搜索用户的功能。我使用await 在异步函数中调用该函数,并将返回值分配给常量/变量,但在打印常量/变量时未定义

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;

最佳答案

您需要 search() 成为一个 promise 而不是一个函数。

await 等待 promise 解决。

试试这个:

function search(email) {
return new Promise((resolve, reject) => {
sql = `SELECT email FROM users WHERE email = '${email}'`;
db.query(sql, (err, res) => {
if (err) {
reject(err);
}
else {
resolve(res[0].email);
}
})
})
}

这将按照 promise 解决,auth() 将等待。

您还可以将 search() 构建为 async/await promise 。只要您返回 promise 解析,这并不重要。

关于javascript - 为什么即使在 async 函数中使用时,await 也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com