首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >knex的事务回滚问题

knex的事务回滚问题
EN

Stack Overflow用户
提问于 2019-06-26 03:29:44
回答 1查看 2.4K关注 0票数 0

我正在尝试使用node js中的knex进行mysql事务。我的SQL事务如下所示

1-检查公司名称是否存在,如果存在,则提示错误并回滚事务。

2-检查电子邮件地址是否存在,如果存在,则提示错误并回滚事务。

3-插入到user、company和userroles表中,如果遇到回滚事务时出错。

现在我观察到,如果在嵌套的then内部发生错误,那么事务不会回滚,而是提交以前的事务。

下面是我的函数代码

代码语言:javascript
复制
return knex.transaction(function(t){
        return knex('company').where({ companyname: companyname }).select('companyid')
        .then(function(rows){
            if(rows.length >= 1)
                return Promise.reject('company already exist');
            return knex('Users').where({email: emailaddress}).select('userid')
        })
        .then(function(rows){
            if(rows.length >=1 )
                    return Promise.reject('user already exist');

            return knex('Users').insert({username:username,email:emailaddress,passsword:password,creationtime:'2008-11-11 13:23:44',updationtime:'2008-11-11 13:23:44'},'userid')

        })
        .then(function(useridreturned){
            userid=useridreturned;
            return knex('company').insert({companyname:companyname,companytokens:100})

        })
        .then(function(companyidreturn){
            companyid=companyidreturn;
            return knex('userroles').insert({userid:userid[0],roleid:1,companyid:companyid[0]},'userrolesid')

        })
        .then(function(result){
            return Promise.resolve('Account Created');
        })
        .then(t.commit)
        .catch(t.rollback)


  })

我是不是做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 22:21:07

在knex中使用事务时,您需要告诉每个查询它应该转到给定的事务。

因此,您应该编写t('table').insert({...}}),而不是执行knex('table').insert({...}}) (从池中分配新连接),它将向正在进行事务的连接发送查询。

另外,如果您返回promise

代码语言:javascript
复制
knex.transaction(trx => {
  return trx('table').insert({...});
})

您不能使用返回的promise的result /Reject值来显式调用knex隐式调用的trx.commit() / trx.rollback()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56760824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档