Node.js Readline接口'暂停'事件不会暂停输入流

时间:2014-09-11 17:18:11

标签: node.js stream

我希望下面的代码创建一个Readline接口,其中包含一个包含~~ 1000个URL列表的文件的可读流,从输入流开始流式传输(将一行记录到控制台),然后暂停:

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

var rlinterface = readline.createInterface({
    input: fs.createReadStream('urls.txt'),
    output: null,
    terminal: false
});

rlinterface.on('pause', function() {
    console.log('Readline paused.');
});

rlinterface.on('line', function(line){
    console.log(line);
    rlinterface.pause();
}); 

pause事件的侦听器通知我应该暂停流,但是输入流中文件中的所有行都会记录到控制台,这表明该流从未暂停。即使流不会在第一行之后立即暂停(可能需要一些额外的行captured in a buffer),我也不希望来自输入流的文件中的所有行都在流之前流式传输'暂停'。那是怎么回事?

1 个答案:

答案 0 :(得分:3)

可能发生的事情是整个文件被一次性读入,当你pause()时,没有什么可读的。具体来说,highWaterMark的默认fs.ReadStream64KB,因此可读流可以在第一次读取时轻松使用整个17KB文件,因为它会尝试将内部缓冲区保持为{{{ 1}}。