Пользовательский валидатор Seqeulize Отклонение необработанного обещания - PullRequest
0 голосов
/ 07 мая 2020

Вот документация для валидаторов: https://sequelize.org/master/manual/validations-and-constraints.html. Он говорит, что выдает ошибку, если он не работает

Допустим, у меня есть таблица пользователей, и я хочу, чтобы было добавлено не более 500 пользователей, поэтому я создаю валидатор:

{
    sequelize,
    tableName: 'users',
    validate: {
      limitUsers: async function(x) {
          const count = await sequelize.models.User.count({...});
          if (count > 500) {
            throw new Error(
              `blah blah`,
             );
          }
        }
      },
    },
  },

Когда я создаю пользователь, это часть транзакции, но вызов выглядит примерно так:

 try {

    const user = await user.create(
      {
       ...
      },
      { transaction },
    );
  } catch (e) {
    console.log('Handle error here');
    ....
  }

По какой-то причине уловка не вызывает ошибку, выданную валидатору, а просто выдает 500, не попадая в уловку . Почему это происходит? Я просто не понимаю, как работают обещания?

1 Ответ

0 голосов
/ 07 мая 2020

Кажется, что валидаторы должны быть синхронными, поэтому sequelize и awaits asyn c валидаторы не перехватывают от них отказы.

Возможная причина может заключаться в том, что валидаторы должны быть быстрыми и не использовать запросы ( в противном случае возникнет вопрос о передаче транзакции валидатору.

...