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 可以实现对可读流的读取和暂停控制,以及错误处理等功能。