首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongoose promises和bluebird

Mongoose promises和bluebird
EN

Stack Overflow用户
提问于 2015-08-05 01:38:03
回答 1查看 644关注 0票数 2

node会有Promise的内置实现吗?或者我们应该采用一个主要的库吗?比如Q/Blueblird?我有一个使用async.waterfall的代码,我想将它移动到使用promises。其中一个链式函数是mongoose findOne,它从Mongoos4.0开始返回promise,但我知道混合promises类型是不好的做法,因为mongoose使用它自己的promise实现,而我想使用Q/Bluebird。我应该在mongoose上使用promsifyAll吗?或将promisify将被弃用,一旦promise将在节点中实现,当前代码为:

代码语言:javascript
复制
async.waterfall([
    function(done){
        User.findOne({ email: reco.mail }, done);
    },
    function(receiverUser, done){
        if (!receiverUser){

        } else {
        }

        // send the model to mongoose to get verified and persisted
        reco.save(function (err) {
            if (err) {
                //handle error
            }

            return done(err);
        });
    }
], function(err){
    if (err) {
        console.error('unexpected error while creating reco', err);
        return res.status(500).send({});
    }

    console.log('reco created successfully', reco);
    return res.status(201).send({});
});

我想将它更改为().then.catch()样式

EN

回答 1

Stack Overflow用户

发布于 2015-08-05 02:12:29

我建议你保持下面的方式,至少我正在使用这个方法,并且它是有效的。请检查下面的代码示例。

代码语言:javascript
复制
var Promise = require('bluebird');
//declaration
userSchema.statics.search = function (query) {
  return new Promise(function(resolve, reject){
    return mongoose.model('User')
      .find(query)
      .exec()
      .then(function(foundUsers){
        resolve(foundUsers);
      })
      .onReject(function(err){
        reject(err);
      });
  });
};

//using
var UserModel = require('path/to/user/model');
UserModel
  .search(<query>)
  .then(function(foundUsers){
    //do something
  })
  .catch(function(err){
    //so something
  });


//declaration
userSchema.methods.saveMe = function () {
  var user = this;
  return new Promise(function (resolve, reject) {
    user.save(function (err) {
      if (err) {
        reject(err);
      } else {
        resolve(user);
      }
    });
  });
};


//using
var UserModel = require('path/to/user/model');
var newUser  = new UserModel(newUserData);
newUser
  .save(function(savedUser){
    //do something
  })
  .catch(function(err){
    //so something
  });

当然,在这种情况下使用Promisify也有帮助,但有几次我遇到了问题,所以我决定将Mongoose promise转换为众所周知的格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31815790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档