Brad实际上已经提出了这个问题,但我还没有找到真正回答的问题。必须重复调用可读事件处理程序中的readable.read()
吗?在当前节点文档中,示例代码为:
var readable = getReadableStreamSomehow();
readable.on('readable', function() {
var chunk;
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
});
重复调用 readable.read()
。
该文件说明了可读事件:
一旦内部缓冲区耗尽,当有更多数据可用时,将再次触发可读事件。
它还说明read()
:
如果未指定size参数,则它将返回内部缓冲区中的所有数据。
那么有没有将它放在while循环中以重复调用read()
所必需的?
答案 0 :(得分:1)
首先,如果read永远不会返回null,这将导致服务器阻塞:
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
除非您指定尺寸参数,否则您每次只需要阅读一次“可读”字样。事件被解雇了。如果您指定了尺寸,并且尺寸小于要读取的数据总量,那么您必须多次调用它。
您有readable.on('end', ...
可以让您知道何时没有更多数据可用。
答案 1 :(得分:0)
在对象模式下,.read()
仅返回一个对象,因此这是必要的。我不确定这对于二进制流是否有必要,但我已经成功地仅在每个.read()
事件中调用readable
一次。