bluebird 多层嵌套该如何优化。
发布于 16小时前 作者 youngdeer 72 次浏览 来自 问答
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)
回到顶部