有没有可能使用bookshelf创建原子数据库事务?我在数据库中遇到了重复的问题。以下是有问题的代码:
bookshelf.transaction(function (t) {
var modelLocation = new Models.Location({'name':event.venue});
modelLocation.fetch({transacting:t})
.then(function (fetchedLocation) {
if (!fetchedLocation) {
modelLocation.save(null,{transacting:t}).then(function (savedModel) {
t.commit(savedModel)
}).catch(function (err) {
t.rollback(err)
});
}
else{
t.commit(fetchedLocation)
}
})
})
我几乎同时异步调用包含此代码的方法20次。其中5个数据集是重复的。这将在数据库中产生大约2-3个重复项。目前的解决方法是使用setTimeout将整个过程包装起来,并设置一个随机的超时时间,在0到10秒之间,这几乎不会给我带来重复项。但这显然不是一个可以用于生产的解决方案。