使用 async.parallel 续接交易
Sequelize Transaction with async.parallel
我想在 async.parallel() 中使用托管续集交易。
现在,我这样做:
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 事务和 async.parallel 一起使用的推荐方法是什么?
我只是使用了 非托管事务 而不是托管事务,然后它就起作用了。
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(...)
而不是交易中的回调函数。另请注意 t.rollback()
return Promise,因此您可以对它们使用 .then()
。
更多信息:http://docs.sequelizejs.com/manual/tutorial/transactions.html#unmanaged-transaction-then-callback-
我想在 async.parallel() 中使用托管续集交易。
现在,我这样做:
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 事务和 async.parallel 一起使用的推荐方法是什么?
我只是使用了 非托管事务 而不是托管事务,然后它就起作用了。
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(...)
而不是交易中的回调函数。另请注意 t.rollback()
return Promise,因此您可以对它们使用 .then()
。
更多信息:http://docs.sequelizejs.com/manual/tutorial/transactions.html#unmanaged-transaction-then-callback-