我完全绝望的这个问题。我有一个查询数组,我在内存中存储这么久。有了它,我调用了一个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)结果方法可行,但在返回所有文档所有正在执行的代码的结尾。这里有什么问题?
我会非常感谢,因为这让我疯狂!
感谢
哲罗
我想你应该在你的'results'函数中返回一个承诺或回调。因为你的'QueryMongo'是异步的,你不应该把它用作同步功能 –
这就是问题所在。我一步一步调试代码,问题在于我的结果函数resp中的“then”。回调。它再次运行异步...另一个承诺? – Hucho