Sequelize JS事务在销毁和批量创建时未回滚。

5

在批量创建/插入新报告之前,我尝试删除所有报告细节。问题在于,当 bulkCreate 中出现错误时,它不会回滚。它应该将被销毁的报告细节恢复,但是它不起作用。

我测试此事务代码的方式是先插入 report_details,然后手动更改一个名称,以便再次插入时出现列错误。交易应该回滚,但实际上已销毁报告详细信息,并且在 bulkCreate 出错时,不会恢复已销毁的报告详细信息。 请有人查看我的代码。我已经在 Google 上搜索过,我的语法是正确的。 还有,在我的机器上如何测试交易?除了更改列名称之外,是否有其他方法可以产生错误?

function saveReportsDetails(results) {
db.report_detail.bulkCreate(results.report.objAllReportsDetail);

    return db.snpreq.transaction(t => {
        // transaction block
        return db.report_detail.destroy({
            where: {
                profile_id: results.profile.data[0].id
            }
        }, {
            transaction: t
        }).then(deleted => {
            console.log('*******TRANSACTION DELETED*********');

            return db.twenreport_detail.bulkCreate(results.report.objAllReportsDetail, {
                transaction: t
            }).then(reports_created => {
                console.log('*******TRANSACTION bulk created*********');
            });
        });
    }).then(transaction => {
        console.log('********All Transaction********');
    }).catch(err => {
        console.log('*******ROLL BACK*********');
    });
}

如果我在TRANSACTION批量创建的成功中添加throw new Error(),代码会进入catch并打印ROLL BACK,但仍然无法返回destroyed report_details。 - Syed Danial
1个回答

11

我的代码存在语法错误。在删除交易时,它只需要一个参数transaction: t,格式如下:

return db.twentythree_and_me_report_detail.destroy({
            where: {
                profile_id: results.profile.data[0].id
            },
            transaction: t
        })

我没有收到任何语法错误或其他错误提示,所以我继续搜索并找到了答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接