leshikgo
@leshikgo

Как дождаться завершения асинхронной функции?

Здравствуйте есть код:
var isLoginIn = false;

ajcom.register('login', (hCtx, email, pass) => {

     User.findOne({
        where: {
          email: email
        }
      }).then(function(foundUser) {
        if (foundUser && foundUser.password === pass) {
          console.log("Авторизация прошла успешно!");
          isLoginIn = tru;
        }
        else {
          console.log("Неверные данные, проверьте ваш email и пароль!");
        }
      });
      return {authorized: isLoginIn};
});

Проблема в том, что мне надо return {authorized: isLoginIn}; возвратить данные после запроса к бд, если авторизация успешна то isLoginIn = true; дело в том что return {authorized: isLoginIn}; не дожидается запроса, как решаются данные ситуации?
  • Вопрос задан
  • 804 просмотра
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
ajcom.register('login', async (hCtx, email, pass) => {
  const foundUser = await User.findOne({ where: { email } });
  
  if (foundUser && foundUser.password === pass) {
    console.log("Авторизация прошла успешно!");
    isLoginIn = true;
  } else {
    console.log("Неверные данные, проверьте ваш email и пароль!");
  }
  return { authorized: isLoginIn };
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Opanagushin
Если не сильно вдаваться в подробности, то можно так:
User.findOne({
        where: {
          email: email
        }
      }).then(function(foundUser) {
        if (foundUser && foundUser.password === pass) {
          console.log("Авторизация прошла успешно!");
          isLoginIn = tru;
        }
        else {
          console.log("Неверные данные, проверьте ваш email и пароль!");
        }
      }).then(function() { 
         return {authorized: isLoginIn};
      });


Но надо понимать, что функция асинхронная и вам в любом случае придется ждать её выполнения. Если непонятно выглядят промисы, то посмотрите на async\await
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
async, await в легкую решит твою проблему.
Ответ написан
Ваш ответ на вопрос

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

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