gpt4 book ai didi

node.js - Sequelize 自定义验证器未处理的 promise 拒绝

转载 作者:行者123 更新时间:2023-12-03 22:35:19 26 4
gpt4 key购买 nike

这是验证器的文档: 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');
....
}

出于某种原因,catch 没有抛出验证器中抛出的错误,它只是抛出 500,而没有命中 catch。为什么会这样?我只是不明白 Promise 是如何工作的吗?

最佳答案

似乎验证器必须是同步的,所以这就是为什么 sequelize 和 awaits 异步验证器都不会从它们那里捕获拒绝。

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

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

关于node.js - Sequelize 自定义验证器未处理的 promise 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com