创建一个新行"/>
使用 sequelize 在单个请求中更新一行并创建一个新行
在我的系统中有很多用户,每个用户可以有很多随机名称(由系统生成),但一次只能有一个。
export const RandomName = sequelize.define('random_name', {
id: {type: DataTypes.UUID, primaryKey: true, defaultValue: DataTypes.UUIDV4},
name: {type: DataTypes.STRING, allowNull: false},
isActive: {type: DataTypes.BOOLEAN},
})
User.hasMany(RandomName)
RandomName.belongsTo(User)
我有一个 generateNewRandomName 解析器,它更新当前的 RandomName 实例 ({isActive: false}),并创建一个新的 ({isActive: true})
async generateNewRandomName(userId){
const currentRandomName = await RandomName.findOne({where: {isActive: true}})
if (currentRandomName){
await currentRandomName.update({isActive: false})
}
const newNameString = v4()
const newRandomName = await RandomName.create({name: newNameString, isActive: true})
}
问题是如果用户一次发送很多请求,许多相同的函数被调用并且他们试图丢弃相同的令牌,因为新的还没有被创建。
结果,许多新的代币被创造出来。我怎样才能防止这个问题?
回答如下:更多推荐
使用 sequelize 在单个请求中更新一行并创建一个新行
发布评论