承诺问题:使用Q.nfcall()调用mongoose.findOne()

时间:2016-01-10 17:33:38

标签: node.js mongoose promise q

我有以下代码,其中mongoose的{​​{1}}方法使用findOne包装:

Q.promise

我正在尝试使用// _getById should be returning a Promise var _getById = function(id) { return Q.Promise(function(resolve, reject) { ApplicationModel.findOne({ _id: id, 'metadata.isDisabled': false }, '-metadata', function(err, application) { if (err) { return reject(err); } if (!application) { return reject(new CustomError('Not found', 404)); } resolve(application); }); }); } 方法重构该代码,这是我到目前为止所做的:

Q.nfcall

无效,我在屏幕上收到以下错误

  

info:TypeError:无法读取属性'discriminatorMapping'   未定义       在findOne [...]

似乎var _getById = function(id) { var searchOptions = { _id: id, 'metadata.isDisabled': false }; return Q.nfcall(ApplicationModel.findOne, searchOptions, '-metadata') .then(function(application) { if (!application) { throw new CustomError('Not found', 404); } return application; }); } 方法未使用findOne正确调用,我正在关注Q's API Reference for nfcall function,但我无法理解原因。

1 个答案:

答案 0 :(得分:1)

猫鼬已经被宣传了。所以,你的代码可以简单地是:

var _getById = function(id) {
  var searchOptions = {
    _id: id,
    'metadata.isDisabled': false
  };

  return ApplicationModel.findOne(searchOptions, '-metadata')
    .then(function(application) {
      if (!application) {
        throw new CustomError('Not found', 404);
      }
      return application;
    });
}