【发布时间】:2016-08-17 19:49:25
【问题描述】:
我对这个问题完全绝望。我有一个查询数组,我在内存中存储了很长时间。有了它,我调用一个 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) 有效,但在所有正在执行的代码结束时返回所有文档。这里有什么问题?
我会非常感激,因为这让我发疯了!
谢谢
胡乔
【问题讨论】:
-
我认为你应该在
results函数中返回一个承诺或回调。因为您的QueryMongo是异步的,所以您不应该将其用作同步函数 -
这正是问题所在。我通过代码一步一步地调试,问题出在我的结果函数中的“then”。回调。它再次异步运行......另一个承诺?
标签: javascript node.js asynchronous mongoose promise