Bookshelfjs:事务中的多个函数

时间:2017-02-15 11:46:30

标签: javascript knex.js bookshelf.js

我正在尝试在单个事务中包装多个函数。虽然它没有抛出任何错误,但交易没有得到承诺。

以下是示例摘要。

function doSomething(ids){
    bookshelf.transaction(function(trx){
        if(someCondition){
            new Service().save({ 'name': service.name },{transacting:trx}).then(function(){
                doSomeDBUpdate1(ids,trx);
            });

        }else{
            doSomeDBUpdate1(ids,trx);
        }
    })
}

function doSomeDBUpdate1(ids,trx){
    new accounts({ id: accountId }).services().attach(serviceIds,{transacting:trx}).then(function(){
    //do something
    })
}

1 个答案:

答案 0 :(得分:1)

交易不知道你什么时候输入新的查询...所以现在它永远不会提交。

这应该有效:

function doSomething(ids){
  bookshelf.transaction(function(trx){
    if(someCondition){
      return new Service()
        .save({ 
          'name': service.name 
        }, {transacting:trx})
        .then(function(){
          return doSomeDBUpdate1(ids,trx);
        });
    } else {
      return doSomeDBUpdate1(ids,trx);
    }
  })
}

function doSomeDBUpdate1(ids,trx){
  return new accounts({ id: accountId })
    .services()
    .attach(serviceIds,{transacting:trx})
    .then(function() {
      // do something... if async remember to return the promise
    });
}