我想在一个bookhelf事务中更新许多数据库表.我可以使用一些帮助重构我的代码.我是节点的新手,对Promises没有很好的理解,但下面的嵌套结构不是很漂亮,我希望有一个更清洁的方法.任何帮助,将不胜感激.
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);
});
}) …Run Code Online (Sandbox Code Playgroud)