【问题标题】:Promise issue: using Q.nfcall() to call mongoose.findOne()承诺问题:使用 Q.nfcall() 调用 mongoose.findOne()
【发布时间】:2016-04-14 23:56:31
【问题描述】:

我有以下代码,其中mongoosefindOne 方法使用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 方法重构该代码,这就是我目前所拥有的:

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;
    });
}

但它不起作用,我在屏幕上收到以下错误

信息:TypeError:无法读取属性“discriminatorMapping”的 不明确的 在 findOne [...]

似乎没有使用Q.nfcall 正确调用findOne 方法,我正在关注Q's API Reference for nfcall function,但我不明白为什么。

【问题讨论】:

  • 你知道mongoose 已经被承诺了吗? return ApplicationModel.findOne(ApplicationModel.findOne, searchOptions, '-metadata').then( ... );
  • @ShanShan 是吗?我有第一个通知! (如果我这样做了,我就不会承诺了^^)
  • 是的,试试我写的代码,应该可以的。不过你有一个借口,猫鼬文档不是最容易阅读的:p
  • @ShanShan haha​​ha 我同意,它们不是最简单的!谢谢!! :-) 我现在要试试。您可以将其发布为答案,我会将其标记为正确。
  • @ShanShan 完美运行!继续,回答问题! :-)

标签: node.js mongoose promise q


【解决方案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;
    });
}

【讨论】:

  • 这非常有用!!
猜你喜欢
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2020-12-15
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多