我试图在一个事务中包装多个功能。尽管它没有引发任何错误,但是事务没有得到落实。

以下是示例代码段。

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
    })
}

最佳答案

事务不知道何时输入完新查询...因此现在它永远不会提交。

这应该工作:

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
    });
}

08-06 00:08