最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

knexjs使用事务从父子表中删除行

IT培训 admin 5浏览 0评论

knexjs使用事务从父/子表中删除行

我正在使用knexjs从表中删除一行。此表在另一个表中引用了行,因此我需要先删除这些子行以删除父行。我想使用一个事务,以便在父删除失败时我可以回滚子删除。

这是我的代码,但它似乎挂在第二个查询:

return Bookshelf.knex.transaction((t : any) => {
        return Bookshelf.knex('user_patient_groups')
            .transacting(t)
            .del()
            .where('patient_group_id', groupID)
            .then(() => {
                return Bookshelf.knex('patient_groups')
                    .del()
                    .where('patient_group_id', groupID)
                    .then(tmit)
                    .catch(t.rollback);
            });
    });

谁能看出我在这里做错了什么? knexjs文档不是很广泛。

回答如下:

你应该省略打电话

.then(tmit)
.catch(t.rollback)

如果在交易回调中返回承诺,knex将为您管理您的交易。因此,使用您的.catch,您可以抑制通过承诺链传递的错误,并且事务会看到履行承诺。

否则,不要从您的交易中退回承诺(删除returns)并离开commitrollback

knexjs使用事务从父/子表中删除行

我正在使用knexjs从表中删除一行。此表在另一个表中引用了行,因此我需要先删除这些子行以删除父行。我想使用一个事务,以便在父删除失败时我可以回滚子删除。

这是我的代码,但它似乎挂在第二个查询:

return Bookshelf.knex.transaction((t : any) => {
        return Bookshelf.knex('user_patient_groups')
            .transacting(t)
            .del()
            .where('patient_group_id', groupID)
            .then(() => {
                return Bookshelf.knex('patient_groups')
                    .del()
                    .where('patient_group_id', groupID)
                    .then(tmit)
                    .catch(t.rollback);
            });
    });

谁能看出我在这里做错了什么? knexjs文档不是很广泛。

回答如下:

你应该省略打电话

.then(tmit)
.catch(t.rollback)

如果在交易回调中返回承诺,knex将为您管理您的交易。因此,使用您的.catch,您可以抑制通过承诺链传递的错误,并且事务会看到履行承诺。

否则,不要从您的交易中退回承诺(删除returns)并离开commitrollback

发布评论

评论列表 (0)

  1. 暂无评论