Nodejs - ファイルから行ごとに読み取り、各行に対して非同期アクションを実行して再開する 質問する

Nodejs - ファイルから行ごとに読み取り、各行に対して非同期アクションを実行して再開する 質問する

ファイルを 1 行ずつ読み取り、コールバックを持つアクションを実行し、関数が終了したら行の読み取りを再開しようとしています。例:

var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var instream = fs.createReadStream('./phrases.txt');
var outstream = new stream;
var rl = readline.createInterface(instream, outstream);
rl.on('line', function (line) {
  rl.pause();
  setTimeout(function () {
    console.log('resuming');
    rl.resume();
  }, 2000);
});

上記の例は、基本的に1行を読み、2秒待ってから次の行に進むものだと思っていましたconsole.log。実際には、最初の2秒待ってから、大量のconsole.log

ベストアンサー1

1行ずつこのモジュールは、ファイルをメモリにバッファリングせずに、大きなテキスト ファイルを行ごとに読み取るのに役立ちます。

行を非同期に処理できます。以下は提供されている例です:

var LineByLineReader = require('line-by-line'),
    lr = new LineByLineReader('big_file.txt');

lr.on('error', function (err) {
    // 'err' contains error object
});

lr.on('line', function (line) {
    // pause emitting of lines...
    lr.pause();

    // ...do your asynchronous line processing..
    setTimeout(function () {

        // ...and continue emitting lines.
        lr.resume();
    }, 100);
});

lr.on('end', function () {
    // All lines are read, file is closed now.
});

おすすめ記事