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', ...,它将使您知道何时没有更多数据可用。

10-07 13:46