我在MongoDB中使用listCollection
方法,并使用find
查询每个返回的集合。在循环中嵌套异步数据库调用,等到循环完成
的问题是,我使用循环来构建祝循环完成后response.json
返回一个对象,但因为find
是异步我停留在盘算如何“等待”,直到每find
回调之前完成返回response.json()
var data = {};
database.listCollections({name: {$ne: 'system.indexes'}}).toArray(function(err, collections) {
if (err) return res.json({});
for(i=0; i<collections.length; i++){
var collection = collections[i].name;
database.collection(collection).find(query, limit)
.sort({"Date": -1}).toArray(function(err, docs){
if (err) return res.json({
});
/* Do stuff with docs, push stuff to data */
});
/** Console shows blank **/
console.log("Data " + i+ ": " + JSON.stringify(data));
}
/** Response is blank.. **/
res.json(data);
});
的问题是,find()
s的完成前的for循环返回方式。如何以JS
/Node
的方式处理此问题?我可以一起解决一个解决方案,但我可能以后遇到类似的问题..
编辑:我确定数据实际上返回并正确处理,因为每个数据查找内的console.log()
显示它实际上有内容。