如何在节点 js 中为全局变量分配猫鼬结果?

Posted

技术标签:

【中文标题】如何在节点 js 中为全局变量分配猫鼬结果?【英文标题】:how can i make a assign mongoose result in global variable in node js? 【发布时间】:2018-02-17 17:44:09 【问题描述】:

我从数据库(Mongo)中获得了一个函数,我根据结果保存了圆顶变量,但我不能在外部函数中使用该变量。如何访问变量?

目前,我在使用控制台的函数中得到了结果。但是我在未定义的外部使用了相同的变量,但是,我使用我遇到了同样的未定义错误。 如果没有超时功能,我该如何完成。

     var all_mail;
     mailModel.find(, function (err, docs) 
              console.log(docs); //Got results this console
              all_mail = docs;
               
            );
     console.log(all_mail); //This is showing undefind

【问题讨论】:

【参考方案1】:

您需要了解 node.js 如何处理异步行为。在这种情况下,您的回调函数只能在范围内访问docs

您的想法是正确的,如果您等待足够长的时间,您的变量很可能会被分配。但是,这确实不是节点的做事方式。

您很可能应该在传递给find() 的函数中对docs 做任何您想做的事情。

 mailModel.find(, function (err, docs) 
   doSomething(docs);
 );

这可能会彻底改变程序的结构。您可能还想研究在 Mongoose 中使用 Promise (http://mongoosejs.com/docs/promises.html),然后使用 async/await,只要您的节点版本支持它。

我相信使用带有 await 的 Promise 看起来像:

var docs = await mailModel.find().exec();
doSomething(docs);

【讨论】:

以上是关于如何在节点 js 中为全局变量分配猫鼬结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬节点js中为朋友创建模式

js如何在方法内部定义全局变量

QT如何设置可变的全局变量

如何在 C++ 的主函数中为全局声明的 2d 向量分配大小?

如何在 Meteor 中为全局变量创建自己的命名空间?

如何在 PHP 中为变量分配数据库表中的值