我必须在可读事件处理程序中重复调用 readable.read() 吗?

Bra*_*rad 5 node.js node.js-stream

假设我创建了一个名为的转换流Parser,它可以像普通流一样写入,但作为对象流读取。我正在将readable事件用于使用此转换流的代码:

var parser = new Parser();
parser.on('readable', function () {
    var data = parser.read();
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

在这个事件处理程序中,我必须重复调用parser.read()吗?或者,是否会readable针对从我的转换流中推送的每个对象自行触发?

msc*_*dex 6

根据节点文档,“一旦内部缓冲区耗尽,当有更多数据可用时,可读事件将再次触发”,因此,如果您read()仅调用一次并且仍有更多数据需要读取,则必须记住read()一些稍后会详细介绍。

您可以调用read()while 循环(在“可读”事件处理程序内)直到返回 null,然后等待下一个“可读”事件。