Как остановить обещание для дальнейшего выполнения после возврата и следующего обратного вызова функции? - PullRequest
0 голосов
/ 04 июля 2019

Я проверяю идентификатор пользователя в loopmodal, а затем проверяю, существует ли уже электронное письмо, но должен прекратить выполнение обещания, если условие выполнено, и выйти из него.Я возвращаю следующую функцию, но мой код продолжает выполняться.Вот мой код

User.findOne<UserPersistedModel<UserModel> & UserModel>({
      where: {email: email},
    })
    .then(user => {
    if (user) {
      error = new Error(g.f('This {{email}} is already in use.'));
      (error as HttpError).statusCode = 400;
      (error as HttpError).code = 'EMAIL_NOT_VALID';
      next(error);
      return;
    }}).then(user => console.log('Why getting here')).catch((err?: HttpError) => err && next(err));

1 Ответ

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

Есть только два способа остановить это:

  • throw внутри then, который пропускает следующий , но запустит catch
  • Верните что-то и затем используйте его, чтобы проверить, хотите ли вы выполнить код внутри следующего then

Я думаю, что в вашем случае, похоже, что имеет смысл просто сгенерировать ошибку, которую вы создали, и затем позволить catch распространить ее, например,

.then(user => {
  if (user) {
    const error = new Error(g.f('This {{email}} is already in use.'));
    (error as HttpError).statusCode = 400;
    (error as HttpError).code = 'EMAIL_NOT_VALID';
    throw error;
  }
})
.then(user => { ... }) // this part would skip
.catch(next) // you don't need to check if an error exists in `catch`, it will always exist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...