JS ReadableStream controller 详解

9 min read

JS ReadableStream 是一个流控制器(controller),用于在创建和管理可读流时提供流的读取和暂停能力。它提供了一组用于控制流程的方法和事件。

ReadableStream controller 包含以下属性和方法:

  • desiredSize:一个只读属性,表示下一次想要读取的字节大小。通过监听 desiredSize 属性的变化,可以实现动态调整读取速度。

  • close():方法用于关闭可读流。一旦调用了 close() 方法,流将进入 "closed" 状态,不允许再读取新数据。

  • enqueue(chunk):方法用于将一块数据(chunk)推入流中。可以多次调用 enqueue() 方法,推入多个数据。

  • error(error):方法用于将错误传递给可读流并关闭流。

  • byobRequest:一个只读属性,表示是否支持 BYOB(Bring Your Own Buffer)读取。如果支持,则可以通过 respond() 方法将需要读取的数据写入自定义缓冲区。

  • closeRequested:一个只读属性,表示是否有关闭请求。在 pull 方法的过程中,可以检查该属性来判断是否有关闭请求。

  • pullIntoDescriptor:一个接收 BYOB 数据的描述符。在 BYOB 读取时,需要从 pullIntoDescriptor 中读取数据。

  • autoAllocateChunkSize:一个只读属性,表示 BYOB 读取时每次分配的默认缓冲区大小。

  • desiredSizeChangeAlgorithm:一个属性,用于设置 desiredSize 属性的变化算法。

  • start(enqueue, close, error):方法用于启动流。enqueue 是一个函数,用于将数据推入流中;close 是一个函数,用于关闭流;error 是一个函数,用于传递错误信息。

  • respond(chunk):方法用于回应 BYOB 数据的读取请求。将需要读取的数据写入 chunk 缓冲区。

  • respondWithNewView(view):方法用于回应 BYOB 数据的读取请求,并将新的 ArrayBufferView 对象作为数据写入。

ReadableStream controller 还有以下事件:

  • close:当流关闭时触发。

  • abort:当流中发生错误时触发。

  • pull:当流需要读取更多数据时触发。

通过使用上述属性、方法和事件,ReadableStream controller 可以实现对可读流的读取和暂停控制,以及错误处理等功能。