Node.js Транзакция модуля mssql не работает с асинхронным ожиданием - PullRequest
0 голосов
/ 25 октября 2019
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.');

Мой пользовательский код находится между началом и фиксацией выполнения хранимой процедуры для вставки основных данных после вставки основных идентификаторов основных данных и возвращает идентификатор, который я использую для вставки нескольких подробных данных, используя цикл for и последний.

Я явно поместил ошибочный код во вставку детализации, но транзакция не откатывается, так как основные данные результата вставлены и выдает ошибку детализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...