使用mongoose和node进行查询的时间

时间:2016-04-24 12:49:25

标签: javascript node.js asynchronous mongoose promise

我对这个问题非常绝望。我有一个查询数组,我在内存中存储了很长时间。有了它,我调用一个API,激活我的请求并将结果存储到MongoDB ......没问题。不幸的是我没有控制权。 API-Server和一些Econnet / TCP / IP连接错误使我的应用程序不时崩溃。

为了能够恢复我的查询任务,我在MonogDB中编写了所有查询,并且我想跟踪/记录正在执行的每个查询的queryState。

当我尝试将查询从Mongo返回到触发请求的方法时,我的问题就出现了。由于一些时间/异步问题(我猜),我的queryArray一直保持未定义,我不能解决它......

server.js:

//TEST
var querymongo = require('./config/queryMongo');
var queryobject = new querymongo;
var queryArray = queryobject.results();

queryArray一直保持未定义...

queryMongo.js:

    //require mongo model + db connection
    var queryDB = require('./queryDB');

    //constructor
    ...

    //mongoRequest method
        this.mongoRequest = function(){
            console.log("Function mongoRequest called now!");
            return new Promise(function(resolve, reject){
                queryDB.queries.find({'SearchIndex': 'All'}, function(err, doc){
                    if(err) return reject (err)
                    else resolve (doc)
                });
            });
        }

    //resolve results
    this.results = function(){
        var queryArray = [];
        this.mongoRequest().then(function(doc, err){
             console.log(doc)
            queryArray = doc;
            return queryArray;
        }).catch(function(err){
            console.log(err)
            });
        }



}
module.exports = QueryMongo;

结果方法中的console.log(doc)可以正常工作,但会返回正在执行的所有代码末尾的所有文档。这有什么问题?

我会非常感激,因为这会让我发疯!

由于

哲罗

1 个答案:

答案 0 :(得分:0)

所以你的问题是为什么queryArray未定义?

因为Mongo查询是异步的,并且您正在执行console.log,即在获得结果之前。

//resolve results
this.results = function(){
    var queryArray = [];
    this.mongoRequest().then(function(doc, err){
     //////// DO SOMETHING WITH THE RESULT HERE
    }).catch(function(err){
        console.log(err)
        });
    }