Tôi muốn cập nhật một số bảng cơ sở dữ liệu trong một giao dịch giá sách đơn. Tôi có thể sử dụng một số trợ giúp tái cấu trúc mã của tôi. Tôi mới vào nút và không có một sự hiểu biết tốt về lời hứa, nhưng cấu trúc lồng nhau dưới đây không phải là rất đẹp, và tôi hy vọng có một cách sạch hơn. Bất kỳ trợ giúp sẽ được đánh giá cao.Cách sửa cấu trúc lồng nhau trong giao dịch bookshelfjs
function insertUser(user, cb) {
bookshelf.transaction(function(t) {
var key = user.key;
Developer.forge({key: key})
.fetch({require: true, transacting: t})
.then(function(developerModel) {
var devID = developerModel.get('id');
Address.forge(user.address)
.save(null, {transacting: t})
.then(function(addressModel) {
var addressID = addressModel.get('addressId');
Financial.forge(user.financial)
.save(null, {transacting: t})
.then(function(financialModel) {
var financialID = financialModel.get('financialId');
var userEntity = user.personal;
userEntity.addressId = addressID;
userEntity.developerId = devID;
userEntity.financialId = financialId;
User.forge(userEntity)
.save(null, {transacting: t})
.then(function(userModel) {
logger.info('saved user: ', userModel);
logger.info('commiting transaction');
t.commit(userModel);
})
.catch(function(err) {
logger.error('Error saving user: ', err);
t.rollback(err);
});
})
.catch(function(err) {
logger.error('Error saving financial data: ', err);
t.rollback(err);
})
})
.catch(function(err) {
logger.error('Error saving address: ', err);
t.rollback(err);
})
})
.catch(function(err) {
logger.error('Error saving business : ', err);
t.rollback(err);
})
})
.then(function(model) {
logger.info(model, ' successfully saved');
return Promise.resolve(respond.success({userId: model.get('userId')}));
})
.catch(function(err) {
logger.error(err, ' occurred');
return Promise.reject(new DatabaseError('Unable to write user to database due to error ', err.message));
})};
tốt hơn nhiều, t hanks! –
lý do sử dụng phương thức call() là gì? Tôi biết nó là viết tắt http://bluebirdjs.com/docs/api/call.html nhưng tại sao không chỉ trực tiếp gọi nó từ mô hình? – 1mike12