我在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()
顯示它實際上有內容。