使用Bluebird Promisifyall和Mongoose

时间:2015-09-07 21:40:22

标签: javascript mongodb mongoose promise bluebird

我使用mongoose和Bluebird promisifyall如下:

var mongoose  = require('bluebird').promisifyAll(require('mongoose'))

我想使用以下内容从mongo检索文档:

// Gets a list of Posts
exports.index = function(req, res) {
  console.log(req.query);
  Post.findAsync()
    .whereAsync({author: req.query.id})
    .execAsync()
    .then(function(entity) {
            if (entity) {
              res.status(statusCode).json({
                status_code: statusCode,
                data: entity
              });
            }
    })
    .catch(function(err) {
      res.status(200).json({
        status_code: statusCode,
        message: 'error occured',
        errors: err
      });
    });
};

但它只是挂起,我做错了什么? 非常感谢任何帮助使用蓝鸟与猫鼬的promisifyall,谢谢:))

1 个答案:

答案 0 :(得分:1)

findwhere不是异步的,它们不接受回调。所以不要使用它们的…Async变体 - 你不希望它们返回一个promise,你想要一个mongoose查询对象。

尝试

Post.find().where({author: req.query.id}).execAsync()
.then(…)
.…

顺便说一句,如果entity是假的,你的请求会挂起,在这种情况下你永远不会写回复。请考虑添加else throw new Error("no entity")