节点js,使用带有Q promise的mongoose不会调用拒绝功能

时间:2016-01-30 11:30:47

标签: javascript node.js mongoose

我已经开始学习承诺,我想用它和猫鼬一起使用它。我已经读过mongoose promises是原始的,所以我使用这段代码申请q

var mongoose = require('mongoose');
var q = require('q');
mongoose.Promise = q.Promise;

我创建了我的架构和模型,并尝试通过promises调用函数:

User.findOne({chat_id: 2}).exec().then(
    function (obj) {
        console.log("SUCCESS");
        console.log(obj);
    },
    function (err) {
        console.log("ERROR");
        console.log(err);
    }

).done();

当我调用此代码时,它始终会调用resolve部分并跳过reject部分。如果我故意查询不存在的数据,我的控制台会始终显示SUCCESS行甚至的功能

我错过了什么,或猫鼬会一直使用Model.method().exec().then(resolveFunction)

1 个答案:

答案 0 :(得分:2)

找不到东西不是错误,只是意味着你找不到东西。请参阅:What is returned from Mongoose query that finds no matches?,您的问题可能与此Mongoose JS findOne always returns null

有关

还试试这个:注意我没有使用q.Promise,我使用bluebird。

  User.findOne({chat_id: 2}).exec().then(
    function (obj) {
      if (obj.chart_id === 2) {
        console.log("SUCCESS");
        console.log(obj);
      } else {
        console.log("obj with obj.chart_id == 2 NOT FOUND");
        console.log(obj);
      }

    },
    function (err) {
      console.log("ERROR");
      console.log(err);
    }

  ).done();