使用async.parallel重新定义事务

时间:2017-08-31 16:38:44

标签: asynchronous transactions sequelize.js async.js

我想使用async.parallel()来管理sequelize事务。

现在,我这样做:



return sequelize.transaction(function (t) {
    return async.parallel([
      function(callback){ return func1(t, callback); },
      function(callback){ return func2(t, callback); }
    ], function(err){

      if(err){
        ...
      }
    });
  }).then(function(){
   ...
  }).catch(function(err){
    ...    
  });




如果func1func2在另一个之前失败,则回滚事务。然后两个函数中的下一个将尝试使用该事务,但后来我得到了这个错误:

Error: rollback has been called on this transaction(8b7f7cbc-b617-44fb-a9dd-906397e6f7ca), you can no longer use it.

这是有道理的。

一起使用sequelize Transactions和async.parallel的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

我只是使用非托管交易而不是托管交易,然后才有效。



String




请注意,现在我们在事务中使用return sequelize.transaction().then(function (t) { return async.parallel([ function(callback){ return func1(t, callback); }, function(callback){ return func2(t, callback); } ], function(err){ if(err){ return t.rollback(); } return t.commit(); }); });而不是回调函数。另请注意,sequelize.transaction().then(...)会返回Promises,因此您可以对其使用t.rollback()

更多信息:http://docs.sequelizejs.com/manual/tutorial/transactions.html#unmanaged-transaction-then-callback-