javascript - TransactionError:事务已中止。在 Transaction._rollback
问题描述
我正在尝试回滚失败的事务,但它会引发 TransactionError
我已经尝试捕获异常失败的原因,但它只显示错误。
我正在尝试在导致异常的 int 字段中插入一个字符串。
async create(tenantid: string, staff: StaffDto): Promise < any > {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const userQuery = `insert into Users(Username, Password) Output Inserted.Id values('${User.Username}', '${User.Password)
}')`;
await queryRunner.query(userQuery);
const query = `insert into Address(CountryId,StateProvinceId,City,Address1,Address2,ZipPostalCode,PhoneNumber ) Output Inserted.Id values('${staff.Address.CountryId}','${staff.Address.StateProvinceId}','${staff.Address.City}','${staff.Address.Address1}','${staff.Address.Address2}','${staff.Address.ZipPostalCode}','${staff.Address.PhoneNumber}')`;
await queryRunner.query(query);
await queryRunner.commitTransaction();
return {
...staff,
Id: userQueryResult[0].Id,
};
} catch (err) {
await queryRunner.rollbackTransaction();
this.errorService.throwAPIError(err);
} finally {
await queryRunner.release();
}
}
TransactionError: Transaction has been aborted.
at Transaction._rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/base.js:984:37)
at Transaction._rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/tedious.js:370:11)
at Transaction.rollback (/Users/xxx/Documents/codes/yyy/node_modules/mssql/lib/base.js:957:12)
at /Users/xxx/Documents/codes/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:156:37
at new Promise (<anonymous>)
at SqlServerQueryRunner.<anonymous> (/Users/xxx/Documents/codes/yyy/src/driver/sqlserver/SqlServerQueryRunner.ts:155:16)
at step (/Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:136:27)
at Object.next (/Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:117:57)
at /Users/xxx/Documents/codes/yyy/node_modules/tslib/tslib.js:110:75
at new Promise (<anonymous>)
解决方案
做什么this.errorService.throwAPIError(err);
?它可能是控制台记录TransactionError
,但我不认为这里没有捕获实际的异常。
快速测试是删除this.errorService.throwAPIError(err);
并查看您是否仍然在控制台中收到消息。
推荐阅读
- android - AudioRecord:cordova android 应用程序中的 start() status -38 仅在三星 s8 设备中
- jira - 有没有办法在 JIRA 中找到您在特定日期记录的时间?
- java - 在使用 LinkedList 进行冲突处理的 Java 中实现 HashSet 时出现 NullPointerException?
- c# - VS 2019 - CefSharp - 屏幕共享选项未显示
- sql-server - 对查询结果求和
- dart - 为什么一个动态值可以在不强制转换的情况下转换为另一个而另一个失败?
- angular - 如何在 ngx-Chart 中设置垂直条形图的宽度?
- javascript - 加载资源失败:服务器响应状态为 404(未找到)使用 Vue.js
- python - 列值以数据框 Python 中的先前值为条件
- python - 枕头,将图片转换为数组并返回