node.js - Node.js mssql 模块事务不适用于异步等待
问题描述
config = {
user: process.env.PROD_USER,
password: process.env.PROD_PASSWORD,
server: process.env.PROD_SERVER,
database: process.env.PROD_DATABASE,
options: {
abortTransactionOnError: true, // <-- SET XACT_ABORT ON
},
}
const pool = await sql.connect(config);
const transaction = new sql.Transaction();
await transaction.begin();
const result = await this.get_sp_data(
data[0],
sp.InsertTransactionMaster,
res
);
const masterId = result.recordset[0].MasterId || 0;
if (masterId) {
asyncForeach(req.body.TransactionDetail, async (value) => {
const detailData = {
MasterId: masterId,
SubServiceId: value.SubServiceId,
Rate: value.Rate,
Quantity: value.Quantity,
Amount: value.Amount,
CreatedBy: req.user.id || 0,
MemberId: value.MemberId,
SubMemberIddd: value.SubMemberId || null,
};
await this.get_sp_data(detailData, sp.InsertTransactionDetail, res);
});
}
await transaction.commit();
console.dir('Transaction commited.');
我的自定义代码在开始和提交之间执行存储过程以在插入主数据主 ID 后插入主数据返回我使用 for 循环和最后插入多个详细数据的 ID。
我已在详细插入中明确放置错误代码,但由于插入主数据并给出详细错误,因此事务没有回滚。
解决方案
推荐阅读
- jquery - 在 IBM MobileFirst Platform 上获取位置时出错
- lisp - Lisp 中用于 minimax-alpha-beta 的 REVERSE 函数
- css - 跨项目共享css和ts
- uwp - UWP XAML Prism 未正确绑定数据
- javascript - 向 Bootstrap 4 导航栏下拉菜单添加幻灯片效果(在菜单外部关闭)的问题
- jquery - asp.net核心中的xml绑定
- javascript - 如果最小化,Cordova Windows 应用程序脚本不会执行
- html - 不从Angular 7中的本地路径加载图像
- c - Prime 与否 Prime 输出缓慢
- kubernetes - Kubernetes:了解资源请求/限制和调度