2017-01-15 10 views
1

CSVファイルを出力するために、MongoDBコレクションからデータの配列を作成します。MongoDB、forEach&Promise:forEachループが完了したときを知る方法?

promiseforEachを使用し、すべてのレコードが読み込まれたときにresolveとします。

ただし、以下のコードは機能しません。 promiseは決して解決されません。 if/else状態のバグがあるようです。 forEachループが完了したときを知る別の方法はありますか?

exports.eachRecord = function() { 
    return new Promise(function (resolve, reject) { 
    var data = [] 
    mongoClient.connect(process.env.MONGO, function (err, db) { 
     // Handled connection error 
     if (err) { return console.log(err) } 
     db.collection('log').find().forEach(function (doc) { 
     if (doc !== null) { 
      console.log(doc.ug) 
      data.push(doc.ug) 
     } else { 
      db.close() 
      console.log('done!') 
      resolve(data) 
     } 
     }) 
    }) 
    }) 
} 

ありがとうございます。

答えて

0

forEachは同期です。

問題は非同期ではないmongodb呼び出しにあります。コールバックを追加することで非同期にすることができます。

db.collection('log').find({}, (err, data) => { 
    if (error) ... 
    data.forEach((doc) => { ... }); 
    // Whatever you want to do after forEach. 
}); 
関連する問題