почему ожидание не работает, даже когда используется в асинхронной функции - PullRequest
0 голосов
/ 18 марта 2019

Я сделал функцию поиска пользователя по идентификатору электронной почты.Я вызываю эту функцию в асинхронной функции, используя 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;

1 Ответ

5 голосов
/ 18 марта 2019

вам нужно search(), чтобы быть обещанием, а не функцией.

await ждет обещания решить.

попробуйте это:

 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)
     }
   })
 }

это будет решено как обещание и auth() будет ждать.

Вы также можете построить search() как async/await обещание.На самом деле не имеет значения, пока вы вернетесь к обещанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...