2

Here is the code:

import fs from 'fs';
import readline from 'readline';

let rl;

rl = readline.createInterface({
    input: fs.createReadStream(__dirname + '/allCountries.txt')
});

rl.on('line', (line) => {
    rl.pause();

    console.log('pause');

    // Do something that takes time with the line....
    setTimeout(() => {
        console.log('resume');

        rl.resume();
    }, 500);
});

I am expecting the output to be:

pause
resume
pause
resume
pause
resume
pause
resume
pause
resume
pause
resume
pause
resume
pause
resume
pause
resume

but instead the output is:

pause
pause
pause
pause
pause
pause
pause
resume
resume
resume
resume
resume
resume
resume
resume
pause
pause
pause
pause
pause
pause
pause
resume
resume
resume
resume
resume
resume
resume
resume
pause
pause
pause
pause
pause
pause
pause
resume
resume
resume
resume
resume
resume
resume
resume

How do I force readline module to read one line, pause and wait until reading is resumed?

Gajus
  • 69,002
  • 70
  • 275
  • 438
  • Does your `allCountries.txt` changes over time? – Yan Foto Oct 21 '15 at 11:31
  • No. The assumption is that the file remains static while it is being read. – Gajus Oct 21 '15 at 11:46
  • I am asking because if the file is static, I suggest seeing [this answer](https://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js) instead of using `readline` module, since it is meant to be used with streams. – Yan Foto Oct 21 '15 at 11:52
  • Ironically, the thread that you are referring (the selected answer) to recommends using `readline`, http://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js/32599033#32599033 – Gajus Oct 21 '15 at 12:51
  • The thing is that according to the docs `pause` "doesn't immediately pause the stream of events. Several events may be emitted after calling pause, including line.". So I was hoping that one of suggestions in the question itself might be of use. – Yan Foto Oct 21 '15 at 12:58

0 Answers0