У меня есть сайт, который перед отправкой некоторых страниц должен проверить пользователя и для этого я использую соответствующие функции. Проблема в том, что он должен ждать, пока функции вернут ответ (они асинхронные и я использую 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. Как это исправить?