考虑下面的代码...我想读第5行后暂停流:暂停的readline
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var numlines = 0;
var instream = fs.createReadStream("myfile.json");
var outstream = new stream;
var readStream = readline.createInterface(instream, outstream);
readStream.on('line', function(line){
numlines++;
console.log("Read " + numlines + " lines");
if (numlines >= 5) {
console.log("Pausing stream");
readStream.pause();
}
});
输出(下一个复制)表明,它使阅读后线暂停。也许readline已经在缓冲区中排队了几行,并将它们反馈给我......如果它继续在后台异步读取,这将是有意义的,但基于文档,我不知道适当的行为应该是。有关如何达到预期效果的任何建议?
Read 1 lines
Read 2 lines
Read 3 lines
Read 4 lines
Read 5 lines
Pausing stream
Read 6 lines
Pausing stream
Read 7 lines
感谢您的回答。出于兴趣,这种要求有多普遍?我正在解析需要流式传输到服务器的80GB CSV。还有什么其他用例? –
@ZachSmith我发现在回调不能或不应该同步完成时(比如说,将行插入到数据库中),可以暂停和恢复。如果您正在读取的行比处理它们的速度快,则可能会排队过多请求并耗尽内存。 –