【问题标题】:propagating callback function to mongoose functions将回调函数传播到猫鼬函数
【发布时间】:2014-11-01 00:48:28
【问题描述】:
    TopicStatistics.methods.createTopicStatistics = function(callback)
    {
        // do stuff

        Topic.find({} , function (err, resultList)
        {
             if(err)
             {
                 // do stuff
                 if(typeof callback === "function")
                    callback(err); // callback undefined
             }
             else
             {
                 // do stuff
                 if(typeof callback === "function")
                    callback(null); // callback undefined
             }

        });
    };

上面是我要执行的代码。问题是这样的:

由于 mongoose 主题是异步的,我的函数在 mongoose.find 完成其正常工作之前完成,因此回调变量已被清除并且它变得未定义。

我正在寻找一种将回调函数传播到 mongoose.find 函数的方法。像这样的:

Topic.find({} , function (err, resultList, mycallback);

这将使我能够在我的 mongoose blob 中使用它,并且能够在 mongoose blob 中的操作结束时调用它。

【问题讨论】:

  • 您的第一次尝试应该可以在 IMO 中使用(无需将 mycallback 传递给 Topic.find 的函数)。如果callbackundefined,它必须undefined。 IE。你没有传递任何东西给TopicStatistics.createTopicStatistics
  • 你说得对,是我传错了函数。

标签: javascript node.js mongodb callback


【解决方案1】:

我认为您需要在主题范围内定义另一个回调。

Topic.find({} , function (err, resultList, callback)
    {

您在 Topic.find() 中使用的“回调”变量引用回 TopicStatistics.createTopicStatistics() 上的一组。所以当你进入

Topic.find({} , function (err, resultList, mycallback);

“mycallback”消失了,因为 JavaScript 不检查参数计数。

【讨论】:

  • 我不明白你的意思。您能否举一个正确实施的示例?
  • 我同意上面的 laggingreflex。我误读并认为您在示例中定义了 Topic.find(),但我现在看到您在 createTopicStatistics() 中使用 Topic.find()。
  • 您可能会看到的其他一些事情是创建和保存猫鼬模型之间的时间。为了给出更好的答案,我需要查看更多代码以了解这些时间。您可以尝试将 'Topic' 引用为 this.model('Topic')。请参阅 Mongoose 文档 (mongoosejs.com/docs/guide.html)。在标题“实例方法”下有一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2018-05-26
  • 2021-08-29
  • 2018-07-30
  • 2020-06-29
  • 1970-01-01
  • 2016-10-19
相关资源
最近更新 更多