gpt4 book ai didi

node.js - Bluebird Promise 和 Sequelize 模拟事务原子性

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:54 24 4
gpt4 key购买 nike

我正在使用 bluebird.js Promise 和 Sequelize.js 来模拟我网站上的交易。基本上我尝试在 processTransactions 中做一些事情,如果一切正常,我将 t.commit() 事务,否则我将 t.rollback() 事务。

我还使用 bluebird.js Promise 进行控制流。这是代码:

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 那么程序就会在那里停止。

有人知道发生了什么事吗?谢谢。

最佳答案

我想我在这里找到了答案...... https://github.com/sequelize/sequelize/issues/1510

我认为错误是因为交易不是 promise ,所以 promise 无法正常工作。如果我使用 bluebird promisify 交易功能,那么它就会起作用。

关于node.js - Bluebird Promise 和 Sequelize 模拟事务原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com