Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重复调用Node.js stream readable.read_Javascript_Node.js - Fatal编程技术网

Javascript 重复调用Node.js stream readable.read

Javascript 重复调用Node.js stream readable.read,javascript,node.js,Javascript,Node.js,这个问题实际上已经被问过了,但我发现这个问题还没有得到真正的回答。必须重复调用可读事件处理程序中的readable.read()?在当前节点文档中,示例代码如下所示: var readable = getReadableStreamSomehow(); readable.on('readable', function() { var chunk; while (null !== (chunk = readable.read())) { console.log('got %d by

这个问题实际上已经被问过了,但我发现这个问题还没有得到真正的回答。必须重复调用可读事件处理程序中的
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);
  }
除非指定size参数,否则每次触发“readable”事件时只需调用read一次。如果确实指定了一个大小,并且该大小小于要读取的数据总量,则必须根据需要多次调用它


您有
可读性。在('end',…
上,这将允许您知道何时没有更多数据可用。

在对象模式下,
.read()
只返回一个对象,因此这是必要的。我不确定这对于二进制流是否是必要的,但我只成功地调用了
.read()
每个
可读的
事件一次。

那么我想文档中的示例是正确的。根据当时预期的v.10版本之前的一次谈话(),返回null是规范的一部分。readable事件只有在返回null后才会触发。这可能是文档使用while循环的原因。也许这就是为什么有必要这样做?因为如果直到它为空才读取,那么它还没有返回null。无论如何,文档肯定没有反映必须由readable返回null.read()在另一个Readable事件之前,仅当缓冲区为空时。