Sequelize 事务在异常抛出时不回滚
Sequelize transaction does not rollback when exception throws
我想在sequelize中实现transcation。但是应用事务代码后不会回滚当前插入的行。有人可以帮助我做错什么吗? Package.json 版本是 "sequelize": "^4.39.0","sequelize-cli": "^3.2.0",
let sequelize = model.sequelize;
return sequelize.transaction().then(function (t) {
return model.error_logs.create(
error_logs, { transaction: t }).then(function (user) {
error_logs.stack = 'For Checking Transcation'
return models.error_logs.create(error_logs, { transaction: t }); <-- Here I am creating expection
}).then(function () {
t.commit();
}).catch(function (err) {
t.rollback();
});
});
您应该像这样等待事务中的每个操作,并在事务结束之前等待:
const transaction = await sequelize.transaction()
try {
const newLog = await model.error_logs.create(error_logs, { transaction: transaction })
error_logs.stack = 'For Checking Transcation'
const anotherNewLog = await model.error_logs.create(error_logs, { transaction: transaction })
await transaction.commit()
} catch (err) {
await transaction.rollback()
}
解决方案 2:
const transaction = await sequelize.transaction(async transaction => {
const newLog = await model.error_logs.create(error_logs, { transaction: transaction })
error_logs.stack = 'For Checking Transcation'
const anotherNewLog = await model.error_logs.create(error_logs, { transaction: transaction })
})
我想在sequelize中实现transcation。但是应用事务代码后不会回滚当前插入的行。有人可以帮助我做错什么吗? Package.json 版本是 "sequelize": "^4.39.0","sequelize-cli": "^3.2.0",
let sequelize = model.sequelize;
return sequelize.transaction().then(function (t) {
return model.error_logs.create(
error_logs, { transaction: t }).then(function (user) {
error_logs.stack = 'For Checking Transcation'
return models.error_logs.create(error_logs, { transaction: t }); <-- Here I am creating expection
}).then(function () {
t.commit();
}).catch(function (err) {
t.rollback();
});
});
您应该像这样等待事务中的每个操作,并在事务结束之前等待:
const transaction = await sequelize.transaction()
try {
const newLog = await model.error_logs.create(error_logs, { transaction: transaction })
error_logs.stack = 'For Checking Transcation'
const anotherNewLog = await model.error_logs.create(error_logs, { transaction: transaction })
await transaction.commit()
} catch (err) {
await transaction.rollback()
}
解决方案 2:
const transaction = await sequelize.transaction(async transaction => {
const newLog = await model.error_logs.create(error_logs, { transaction: transaction })
error_logs.stack = 'For Checking Transcation'
const anotherNewLog = await model.error_logs.create(error_logs, { transaction: transaction })
})