1

(約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で非同期を処理できるかどうかはまだ疑問です.ドキュメントでは見つけられませんでした.おそらくそれは不可能です.

4

1 に答える 1

0

期限が数か月遅れていることは知っていますが、参考までに誰かがこの質問に答えました:

Node と Lazy: 完了したことをどのように知ることができますか?

于 2013-11-19T00:31:52.943 に答える