bluebird 多层嵌套该如何优化。
var mongodb = require('./db');
var Promise = require("bluebird");
Promise.promisifyAll(mongodb);
Account.prototype.save = function save(callback){
var account = {
user: this.name,
number: this.number,
type: this.type,
time: this.time,
}
mongodb.openAsync()
.then(function(db){
Promise.promisifyAll(db);
db.collectionAsync('accounts')
.then(function(collection){
collection.ensureIndex('user');
Promise.promisifyAll(collection);
collection.insertAsync(account,{safe:true})
.then(function(account){
mongodb.close();
return callback(null,account);
})
.catch(function(err){
mongodb.close();
return callback(err,null);
});
})
.catch(function(err){
mongodb.close();
return callback(err);
});
})
.catch(function(err){
return callback(err);
});
}
这种情况下,要怎么优化一下。求大神指导!!
1 回复
https://cnodejs.org/topic/560dbc826a1ed28204a1e7de
优化方案
mongoose上的static和method上扩展,别暴漏太多细节在控制层 面向promise,保证每个操作都是一个函数,让流程可以组装,不要忘了最初then的初衷
function find_user() {
return User.findByIdAsync(user_id);
}
function find_user2() {
return User.findByIdAsync(user_id);
}
function error(ex){
console.log(ex);
}
TeamPartner.updateByXXAsync(a,b,c).then(find_user).then(find_user2).catch(error)