我正在使用npm包msssql和事务。如果我的代码在我开始一个事务后失败,我需要回滚这个事务。这里的问题是,如果查询失败,那么数据库本身会回滚事务,当我在NodeJS的catch块中尝试回滚事务时,它会错误地指出事务已经处于aborted状态。那么,有没有什么方法可以在回滚之前检查事务的状态?
发布于 2021-05-31 09:06:43
我在使用async/await时遇到了同样的问题。我用一个新事务上的事件解决了这个问题:
await this.connect();
const txn = await new Transaction(this.pool);
// Keep track of the status:
let open = false;
txn.on('begin', () => {open = true});
txn.on('commit', () => {open = false});
txn.on('rollback', () => {open = false});
try {
await txn.begin();
// ... Database actions ...
await txn.commit();
} catch (error) {
// Only call rollback if still open:
open && await txn.rollback();
throw error;
}希望这对下一个人有帮助。
https://stackoverflow.com/questions/59949465
复制相似问题