Node.js Readline接口“暂停”事件不会暂停inputstream

我期望下面的代码创build一个带有可读stream的文件,其中包含大约1000个URL的文件,从inputstream开始stream式处理(logging一行到控制台),然后暂停:

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事件的监听者通知我应该暂停stream,但inputstream中的文件中的所有行都logging到控制台,这表明stream不会暂停。 即使stream在第一行之后没有立即暂停(可能需要在缓冲区中捕获一些额外的行),我并不希望来自inputstream的文件中的所有行在“暂停'。 发生什么了?

可能发生的情况是,整个文件正在被一次读入,在你pause() ,没有什么可读的了。 具体来说, highWaterMark的默认highWaterMark是64KB ,所以可读stream在第一次读取时可以轻松地使用整个17KB文件,因为它试图将内部缓冲区保持为highWaterMark