如何在节点js中的全局变量中分配mongoose结果?

时间:2017-09-08 18:27:28

标签: javascript node.js express mongoose mean-stack

我从数据库(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 个答案:

答案 0 :(得分:1)

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

你认为如果你等待的时间很长,你的变量很可能会被分配。但是,这确实不是节点的做法。

您很可能应该在传递给docs的函数中对find()执行任何操作。

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

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

我相信使用await的承诺看起来像是:

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