Node.js Bluebird promise和Sequelize模拟事务原子性
我正在使用bluebird.js promise和sequelize.js模拟我网站上的交易。 基本上,我尝试在processTransactions中执行一些操作,如果一切正常,我将t.commit()事务,否则我将t.rollback()事务 此外,我正在使用bluebird.js promise执行控制流。代码如下:Node.js Bluebird promise和Sequelize模拟事务原子性,node.js,transactions,promise,sequelize.js,bluebird,Node.js,Transactions,Promise,Sequelize.js,Bluebird,我正在使用bluebird.js promise和sequelize.js模拟我网站上的交易。 基本上,我尝试在processTransactions中执行一些操作,如果一切正常,我将t.commit()事务,否则我将t.rollback()事务 此外,我正在使用bluebird.js promise执行控制流。代码如下: var processTransactions = function(transactionmain, transactionlist, t){ // code to
var processTransactions = function(transactionmain, transactionlist, t){
// code to process transactions
};
var processtransaction = function(transaction_id) {
// t need to be passed in so we can choose
// t.commit() or t.rollback() the transaction
sequelize.transaction(function(t){
return Promise.resolve({}).bind({transactionmain: [...], transactionlist: [...]})
.then(function(){
return [this.transactionmain, this.transactionlist, t];
})
.spread(processTransactions)
.then(function(){
t.commit().success(function() {})
})
.catch(function(err){
t.rollback().success(function() {})
});
}).error(function(err){
t.rollback().success(function() {})
});
};
我的问题是,如果我不将t参数传递给processTransactions,那么函数可以执行,但不能实现原子性。如果我通过了t,程序就停止了
有人知道发生了什么吗?谢谢。我想我在这里找到了答案。。。
我认为错误是因为交易不是承诺,所以承诺不能正确工作。如果我使用bluebird promisify事务函数,那么它就会工作 你是说简单地传递
t
会引起问题,还是取决于processTransactions()
中如何使用t
?我不知道你认为这个在中设置为,然后在那里(在这个.trasnactiondomain
),但它没有什么意义。尝试Promise.resolve().bind(这个)。然后(…<代码> > RoAM-1888:是的,当我通过T时,程序就停在那里。“BenjaminGruenbaum,你说得对。我确实把一些事情与诺言挂钩了。我不确定我对你的问题了解得很好。如果你的代码被卡住了,那么要么你的承诺没有解决,要么你有竞争的条件。请考虑从问题的角度重新阅读你的问题。以前从未见过您的代码的人—我很难理解问题的具体原因。