(約50 000行)でファイルを読み取り、mongodbで解析した後に各行を保存しようとします。Mongodb の保存機能は非同期です。ファイルを反復処理するには、node-lazy モジュールを使用します。
私が得るのは、mongodbに保存されたレコードの一部のみです(すべての関数に対してコールバックが呼び出されるわけではありません)
var stream = fs.createReadStream(inputFile)
new lazy(stream)
.lines
.map(String)
.forEach(function(line){
db[collection].save(parseLine(line), function(err){
if (err){
console.log(err)
} else {
count++;
}
})
}
)
したがって、エラーはありませんが、count < 実際のレコード (行) count;
それで、問題を解決する最善の方法は何だろうかと思います。
更新:
forEach で syncronios 解析関数を使用して問題を解決し、ファイルが完全に読み取られたら、async.mapSeries を使用してデータを mongodb に保存しました。
しかし、node-lazyで非同期を処理できるかどうかはまだ疑問です.ドキュメントでは見つけられませんでした.おそらくそれは不可能です.