@Dcfgvy

Почему javascript не дожидается выполнения функции, хотя я пишу await?

У меня есть сайт, который перед отправкой некоторых страниц должен проверить пользователя и для этого я использую соответствующие функции. Проблема в том, что он должен ждать, пока функции вернут ответ (они асинхронные и я использую await. Вот код get-запроса:

app.get('/my-course/:cn', async function(req, res){
    let is_in_acc = await fun.check_if_user_is_logged_in(req);
    let any_course_active = false;
    if(is_in_acc){
        any_course_active = (await fun.check_if_user_has_course1(req)) || (await fun.check_if_user_has_course2(req)) || (await fun.check_if_user_has_course3(req));
        console.log(any_course_active);
    }
    if(any_course_active) res.end("hi");
    else res.end("bye");
})

И вот сама функция check_if_user_has_course (они все 3 одинаковые):

async function check_if_user_has_course1(req){
    let counted = Number(fs.readFileSync(path.join(__dirname, 'users_counter.txt'), 'utf-8'));
    if((Number(req.cookies.id) == 0) || (Number(req.cookies.id) > counted)){
        return false;
    }
    else{
        let ans = false;
        mysql = require('mysql');
        const conn = await mysql.createConnection(config);
        await conn.connect(function(err) {
            if (err) {
            return console.error(err);
            }
        });
        await conn.query(`SELECT course_one FROM users WHERE id = ${String(req.cookies.id)}`, function(err, resul) {
            if(err != null) {
                console.log(err);
                return false;
            }
            console.log('hi1');
            if(resul[0]['course_one'] == true) ans = true;
            
        });
        console.log('hi2');
        return ans;
    }
}

И сначала выводится hi2, а потом hi1, хотя должно быть наоборот. Соответственно, функция просто моментально возвращает false. Как это исправить?
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы