【问题标题】:Function with mongodb find does not return result带有 mongodb find 的函数不返回结果
【发布时间】:2015-05-10 16:02:39
【问题描述】:

当我在 Swig 模板中调用函数时,我试图返回 Mongo 结果。它不等待 mongo 结果并继续渲染模板。

示例代码:

function swigfunction(){
  db.collection('contentitems').find({}).toArray(function(err, docs) {
      //generated my output 
      return myoutput;
  });
}

然后我尝试调用该函数,但返回“未定义”。

{{ swigfunction() }}

请帮忙

【问题讨论】:

  • 我认为您需要先学习 javascript 基础知识。看看“范围”是如何工作的,然后谷歌“回调”,这可能是你在这里最不需要的 :)

标签: node.js mongodb swig-template


【解决方案1】:

您可以使用mongo-syncsync mongo-db 客户端库。

【讨论】:

    【解决方案2】:

    MongoDB API 使用异步回调机制。这意味着程序将在数据库处理您的请求时继续运行,而不仅仅是空闲和浪费资源。当数据库的响应最终到达时,回调函数return myoutput;被执行。

    node.js 中通常的模式是嵌套所有异步函数调用并将输出写入最内层的回调函数中。

    【讨论】:

    • 谢谢,我明白,但是在 Swig.js 中,当响应从数据库到达时,Swig 已经渲染了模板。我需要阻止渲染,它应该首先等待数据库的响应。
    • 那么恐怕我认为你不明白 - 函数调用不会包含 myoutput 的值 - 它不像 PHP 或其他同步语言那样工作。 return 不会向swigFunction 返回任何内容,它会将其值返回给您作为find() 回调调用的匿名函数。正如 Philipp 所说,您需要了解这些功能的工作原理。
    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多