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

Node.js 我必须在可读事件处理程序中重复调用readable.read()吗?,node.js,node.js-stream,Node.js,Node.js Stream,假设我创建了一个名为Parser的转换流,它可以像普通流一样写入,但可以作为对象流读取。对于使用此转换流的代码,我正在使用readable事件: var parser = new Parser(); parser.on('readable', function () { var data = parser.read(); console.log(data); }); 在这个事件处理程序中,我必须重复调用parser.read()?或者,对于从我的转换流中推送的每个对象,read

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

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

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

根据节点文档,因此如果只调用一次
read()
,还有更多的数据要读取,那么您必须记住以后再调用
read()


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

如果不指定大小,则每次事件触发只需调用一次。每次有更多数据时,Readable将自行启动


然后你就有了可读的.on('end'),…,这将允许你知道什么时候没有更多的数据可用。

那么有必要在while循环中吗?readable.read()的文档显示它在while循环中。但是它说read()将清空缓冲区。如果要再次激发readable,是否需要像文档所示的那样处于while循环中?向上投票!为什么我不能使用“data”事件而不是在readable内运行while循环event@PirateApp你可以。我有同样的问题,医生也这么说“如果未指定size参数,则将返回内部缓冲区中包含的所有数据。”,那么为什么需要
while
循环,尽管在这种情况下无法指定大小,因为它是一个对象流。