sequelize回滚不promise.all工作
sequelize交易不会回滚,当我使用Promise.all与“循环更新”
我把PostgreSQL sequelize和下面的代码工作正常,如果没有错误。
return db.transaction(t => {
let promises = [];
promises.push(
valuesToUpdate.map(item => {
return db.models.TableToUpdate.update(
{
prop1: item.val1,
prop2: item.val2,
prop3: item.val3,
prop4: item.val4
}
);
})
);
return Promise.all(promises)
.then(res => {
return h.response().code(201);
})
.catch(err => {
console.log(err);
});
});
预期结果:当有任何更新的值的误差,sequelize应该回滚该事务中的一切
实际结果:当有任何更新的值的误差,sequelize提交正确的价值观,但不提交错误(如不为空违规等)的值。我不想这样。此外,如果有错误,catch块被调用,但sequelize还是不回退。
回答如下:需要有在事务级别的catch。下面是我用的结构:
sequelizeDB.transaction(function (t) {
...
promises.push(newPromise1);
...
promises.push(newPromise2);
...
return Promise.all(promises);
}).then(function () {
console.log("SUCCESS!!! (will commit)");
next();
}).catch(function (err) {
console.log("FAILURE !!! (will rollback)");
return next(err);
});
sequelize回滚不promise.all工作
sequelize交易不会回滚,当我使用Promise.all与“循环更新”
我把PostgreSQL sequelize和下面的代码工作正常,如果没有错误。
return db.transaction(t => {
let promises = [];
promises.push(
valuesToUpdate.map(item => {
return db.models.TableToUpdate.update(
{
prop1: item.val1,
prop2: item.val2,
prop3: item.val3,
prop4: item.val4
}
);
})
);
return Promise.all(promises)
.then(res => {
return h.response().code(201);
})
.catch(err => {
console.log(err);
});
});
预期结果:当有任何更新的值的误差,sequelize应该回滚该事务中的一切
实际结果:当有任何更新的值的误差,sequelize提交正确的价值观,但不提交错误(如不为空违规等)的值。我不想这样。此外,如果有错误,catch块被调用,但sequelize还是不回退。
回答如下:需要有在事务级别的catch。下面是我用的结构:
sequelizeDB.transaction(function (t) {
...
promises.push(newPromise1);
...
promises.push(newPromise2);
...
return Promise.all(promises);
}).then(function () {
console.log("SUCCESS!!! (will commit)");
next();
}).catch(function (err) {
console.log("FAILURE !!! (will rollback)");
return next(err);
});