2014-12-10 2 views
1

Я использую обещание bluebird.js и sequelize.js для подражания транзакциям на моем сайте. В основном я пытаюсь сделать что-то в процессе. Транзакции, если все в порядке, я буду t.commit() транзакцию, иначе я сделаю транзакцию t.rollback().обещание Bluebird и Sequelize имитировать транзакцию atomicity

Также я делаю поток управления с использованием обещания bluebird.js. вот код:

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() {}) 
    }); 
}; 

Мой вопрос, если я не передать параметр т в processTransactions то функция может выполнять, но не может достичь атомарность. если я передаю t, тогда программа остановится.

Кто-нибудь знает, что происходит? Благодарю.

+0

Вы говорите, что просто передача 't' вызывает проблему или зависит от того, как' t' используется в 'processTransactions()'? –

+0

Я не знаю, что вы думаете, '' '' 'установлен в' then' там (в 'this.trasnactiondomain'), но это ничего значимого. Попробуйте 'Promise.resolve(). Bind (this) .then (...' –

+0

@ Roamer-1888 да, когда я передаю t, тогда программа останавливается там. –

ответ

1

Я думаю, что я нашел ответ здесь ... https://github.com/sequelize/sequelize/issues/1510

Я думаю, что ошибка в том, что сделка не является обещание так обещание не может работать правильно. Если я использую bluebird, обещаю функцию транзакции, тогда она будет работать.

Смежные вопросы