我想使用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){
...
});

如果func1
或func2
在另一个之前失败,则回滚事务。然后两个函数中的下一个将尝试使用该事务,但后来我得到了这个错误:
Error: rollback has been called on this transaction(8b7f7cbc-b617-44fb-a9dd-906397e6f7ca), you can no longer use it.
这是有道理的。
一起使用sequelize Transactions和async.parallel的推荐方法是什么?
答案 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-