Pausing readline in Node.js

后端 未结 3 965
余生分开走
余生分开走 2020-12-06 01:45

Consider the code below ... I am trying to pause the stream after reading the first 5 lines:

var fs          = require(\'fs\');
var readline    = require(\'r         


        
3条回答
  •  南方客
    南方客 (楼主)
    2020-12-06 02:26

    Somewhat unintuitively, the pause methods does not stop queued up line events:

    Calling rl.pause() does not immediately pause other events (including 'line') from being emitted by the readline.Interface instance.

    There is however a 3rd-party module named line-by-line where pause does pause the line events until it is resumed.

    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.
    });
    

    (I have no affiliation with the module, just found it useful for dealing with this issue.)

提交回复
热议问题