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()
呢? 最佳答案
首先,如果读取从不返回null,这将导致服务器阻塞:
while (null !== (chunk = readable.read())) {
console.log('got %d bytes of data', chunk.length);
}
除非指定大小参数,否则每次触发“可读”事件时只需调用一次read。如果您确实指定大小,并且该大小小于要读取的数据总量,那么您必须根据需要多次调用它。
您具有
readable.on('end', ...
,它将使您知道何时没有更多数据可用。