2014-12-10 5 views
1

내 사이트에서 bluebird.js promise 및 sequelize.js를 사용하여 트랜잭션을 에뮬레이트합니다. 기본적으로 나는 processTransactions에서 무언가를하려고합니다. 모든 것이 정상이면 트랜잭션을 t.commit()합니다. 그렇지 않으면 트랜잭션을 t.rollback()합니다.Bluebird 약속 및 Sequelize 트랜잭션 원 자성 시뮬레이션

또한 bluebird.js 약속을 사용하여 제어 흐름을 수행하고 있습니다. 여기에 코드입니다 : 다음 기능을 실행할 수있는 processTransactions에 t의 매개 변수를 전달하지 않지만 자성을 달성 할 수없는 경우

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를 통과하면 프로그램이 멈 춥니 다.

사람은 무슨 일이 일어나고 있는지 알아? 감사.

+0

단순히't'를 넘기면 문제가 발생하거나'processTransactions()'에서't'가 어떻게 사용 되는가에 달려 있다는 말입니까? –

+0

'이'가 '그 다음에'(this.trasnactiondomain에서)로 설정되어 있다고 생각하지만 그다지 의미가 없습니다. @ promen.resolve(). bind (this)) .then (...' –

+0

@ Roamer-1888 예, 제가 통과 할 때 프로그램이 멈 춥니 다. –

답변

1

나는 내가 트랜잭션이 약속이 제대로 작동하지 않을 수 있도록 약속이 아니기 때문에 오류가 생각 여기에 대답 ... https://github.com/sequelize/sequelize/issues/1510

을 찾은 것 같아요. bluebird를 사용하면 거래 기능을 약속하고 작동하게됩니다.

관련 문제