5

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

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

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

4

2 回答 2

4

根据节点文档,“一旦内部缓冲区耗尽,当有更多数据可用时,一个可读事件将再次触发”,所以如果你read()只调用一次并且还有更多数据要读取,你必须记住read()一些以后再说。

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

于 2014-05-04T05:50:15.350 回答
1

如果您未指定大小,则每次触发事件时只需调用一次。每次有更多数据时,Readable 都会自行触发。

然后readable.on('end', ...,您就可以知道何时没有更多数据可用。

于 2014-07-01T11:04:19.550 回答