listCollection
メソッドをmongodbで使用し、返された各コレクションをfind
を使用してループしています。forループ内のネストされたasync dbコール、wait untilループが実行されました
問題は、私はループが行われているが、find
が非同期であるため、私はすべてのfind
コールバックが前に終了するまで「待つ」する方法を考え出すで立ち往生していた後response.json
に戻りたいオブジェクトを構築するためにループを使用することです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が行われる前に、ループのための道を返すことです。 JS
/Node
方法でこれをどう対処しますか?私は解決策をまとめてみることができますが、後で同様の問題が発生する可能性があります。
編集:実際にデータが見つかった場合は、console.log()
のデータ内に実際に内容があることがわかります。