2016-04-24 66 views
0

我完全绝望的这个问题。我有一个查询数组,我在内存中存储这么久。有了它,我调用了一个API,激发我的请求并将结果存储到MongoDB中......没问题。不幸的是,我没有控制权。 API服务器和一些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)结果方法可行,但在返回所有文档所有正在执行的代码的结尾。这里有什么问题?

我会非常感谢,因为这让我疯狂!

感谢

哲罗

+0

我想你应该在你的'results'函数中返回一个承诺或回调。因为你的'QueryMongo'是异步的,你不应该把它用作同步功能 –

+0

这就是问题所在。我一步一步调试代码,问题在于我的结果函数resp中的“then”。回调。它再次运行异步...另一个承诺? – Hucho

回答

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) 
     }); 
    } 
+0

感谢您的回答,但我正在做这个... – Hucho

+0

我自己解决了它,它的工作很好...如果有人有兴趣我可以发布代码... – Hucho