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
循环,尽管在这种情况下无法指定大小,因为它是一个对象流。