Sequleize自定义验证器 未处理的承诺拒绝

问题描述 投票:0回答:1

这是验证器的文档。https:/sequelize.orgmastermanualvalidations-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,而没有击中捕捉器。为什么会出现这种情况?难道是我不明白承诺的工作原理?

node.js sequelize.js es6-promise
1个回答
0
投票

似乎验证器必须是同步的,所以这就是为什么sequelize和awaitits async验证器既不能捕获拒绝它们的原因。

一个可能的原因是,验证器必须快速,并且不使用查询(否则会有一个关于将事务传递给验证器的问题)。

复杂的异步验证应该在模型之外,应该在调用任何数据修改操作之前执行。

© www.soinside.com 2019 - 2024. All rights reserved.