【问题标题】:Mongoose Find Callback Not ExecutingMongoose Find 回调未执行
【发布时间】:2016-01-08 00:42:22
【问题描述】:

我一直在慢慢地将一个回调繁重的模块转换为使用 Promise (Q),我在运行 find() 的 Mongoose 模型中遇到了一个奇怪的问题。简而言之,承诺链永远不会超过最初的find 命令。我已经将此方法恢复为它的回调实现,但仍然没有看到回调执行。我已将其分解为最基本的行为,handleMedia 函数永远不会运行。

function getMediaByURL(url) {
  Media.find({url: url}, handleMedia);

  function handleMedia(err, media) {
    console.log(err);
    console.log(media);
  }
}

正在另一个模块中创建 DB 连接,但我看到所有正确的东西都以正确的顺序初始化,并且 Mongoose 连接的 readyState1,紧接在 find 函数之前执行。如果我将find 方法转换为使用q.nbind 的承诺,如here 所述,并以1 秒的间隔记录值,则该值始终为{state: 'pending')

我有另一个模型可以通过find 的承诺版本在同一连接上进行保存。我很茫然。

【问题讨论】:

  • 有一个非常相似的问题,即使 readyState 为 1 也不会触发回调。对此有何更新?

标签: node.js mongodb mongoose


【解决方案1】:

你在“find function”之后声明了“handleMedia function”,所以只有回调函数没有被调用..在你的代码中第一个find函数在“handleMedia function”初始化之后执行

所以试试这个

function getMediaByURL(url) {
    function handleMedia(err, media) {
        console.log(err);
        console.log(media);
    }
    Media.find({url: url}, handleMedia);
}

【讨论】:

  • 这实际上是完全错误的。 Javascript 使用一种叫做“提升”的东西,基本上这意味着所有的函数关键字都将在之前处理并提升到范围的顶部,从而使您的代码顺序无关紧要。或者至少是你声明和调用函数的顺序。
猜你喜欢
  • 2013-03-15
  • 2015-03-01
  • 2018-07-22
  • 2018-04-03
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多