并发请求以下代码时,两个事务并发执行。
对于由于并发请求而进行的两个事务,将执行前两个更新,然后从两个事务中插入行。该如何解决。
execute(aid, id, d) {
const _self = this;
this.db.transaction({autocommit: false, isolationLevel: this.db.Transaction.ISOLATION_LEVELS.SERIALIZABLE},
function (t)
{
_self.modal.destroy({
where: {
aid : aid
}
})
.then((result) => {
let promises = [];
for(let i=0; i<data.length; i++) {
promises.push(new Promise(function(resolve, reject) {
_self.modal.create({
val: d[i].val,
id: id,
}).then((s) => {
let hold = []
for(let j=0; j<data[i].hold.length; j++) {
hold.push(_self.addDist(id, aid, s.id, d[i].hold[j]))
}
Promise.all(hold).then(() => {
resolve();
})
}).error(error => {
// error
});
}));
}
return Promise.all(promises);
}).then(() => {
_self.modal.findOne({
where: {
id: id,
},
include: [{}]
}).then(e => {
//success
}).catch(error => {
console.log(error);
});
})
}).catch(function (error)
{
console.log('rolling back as got error ', error);
});
答案 0 :(得分:0)
我们需要按如下所述定义交易类型,并且运作良好。 类型:this.db.Transaction.TYPES.EXCLUSIVE