Как дождаться продолжения результата перед дальнейшими действиями? - PullRequest
0 голосов
/ 05 июля 2019

Я занимаюсь разработкой API nodejs.В некоторых из моих API мне нужно проверить, являются ли некоторые параметры уникальными или нет в базе данных, и мне нужно кодировать его в отдельном методе, чтобы разделить функцию.(PS: я не хочу делать это в моделях продолжения)

Мой вызов API подобен этому

    var duplicate = checkUniqueEmail(req.body.email);
    console.log(duplicate);
    if(duplicate == true){ 
       //do something 
    } else { 
       //return error 
    };

Метод проверки подобен этому

  function checkUniqueEmail(email){
    db.users.find( {
        where: {email: email} 
    }).then( (result) => {
        if(result !== null){
           return false;
        } else {
           return true;
        }
    }).catch(err => {
         console.log(err);
    });

  }

Нонаконец, я получил undefined от console.log (дубликат)

Проблема, кажется, что я регистрирую результат перед его выполнением и возвращаю некоторые результаты, это должна быть проблема асинхронности javascript.

Как я могу изменить свой код для достижения моей цели?

1 Ответ

0 голосов
/ 05 июля 2019

Проблема с вашим кодом в том, что функция checkUniqueEmail не возвращает никакого значения. Вам нужно либо переписать его, используя async и await, либо добавить ключевое слово return перед вызовом в БД:

async foo() {
   var duplicate = await checkUniqueEmail(req.body.email);
   console.log(duplicate);
   if (duplicate == true){ 
      //do something 
   } else { 
      //return error 
   }
}

async checkUniqueEmail(email){
   try {
      var result = await db.users.find({where: {email: email}});
      if (result !== null){
         return false;
      } else {
         return true;
      }
   } catch (err) {
      console.log(err);
   }
}
...