首页 > 解决方案 > 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。

我已在详细插入中明确放置错误代码,但由于插入主数据并给出详细错误,因此事务没有回滚。

标签: node.jsnode-mssql

解决方案


推荐阅读