可读流:pipeThrough() 方法
注意:此功能在 Web Workers 中可用。
pipeThrough()
方法是 ReadableStream
接口的一种链式方法,用于将当前流通过变换流或任何其他可写/可读对进行管道传输。
对流进行管道传输通常会在管道持续时间内将其锁定,从而阻止其他读取器锁定它。
语法
pipeThrough(transformStream)
pipeThrough(transformStream, options)
参数
transformStream
-
一个
TransformStream
(或具有结构{writable, readable}
的对象),它包含一个可读流和一个可写流,它们协同工作将一些数据从一种形式转换为另一种形式。 写入writable
流的数据可以通过readable
流以某种转换后的状态读取。 例如,TextDecoder
将字节写入其中并从其中读取字符串,而视频解码器则将编码的字节写入其中并读取未压缩的视频帧。 options
可选-
向
writable
流进行管道传输时应使用的选项。 可用的选项是preventClose
-
如果将其设置为
true
,则关闭源ReadableStream
将不再导致目标WritableStream
关闭。 preventAbort
-
如果将其设置为
true
,则源ReadableStream
中的错误将不再中止目标WritableStream
。 preventCancel
-
如果将其设置为
true
,则目标WritableStream
中的错误将不再取消源ReadableStream
。 signal
-
如果设置为
AbortSignal
对象,则可以通过相应的AbortController
中止正在进行的管道操作。
返回值
transformStream
的 readable
侧。
异常
TypeError
-
如果
transformStream
的writable
和/或readable
属性未定义,则会抛出该异常。
示例
在以下示例中(有关完整的代码运行,请参见 解压缩 PNG 块,有关源代码,请参见 png-transform-stream),将获取图像并将其主体作为 ReadableStream
检索。
接下来,我们将记录可读流的内容,使用 pipeThrough()
将其发送到一个新函数,该函数创建一个灰度版本流,然后也记录新流的内容。
// Fetch the original image
fetch("png-logo.png")
// Retrieve its body as ReadableStream
.then((response) => response.body)
.then((rs) => logReadableStream("Fetch Response Stream", rs))
// Create a gray-scaled PNG stream out of the original
.then((body) => body.pipeThrough(new PNGTransformStream()))
.then((rs) => logReadableStream("PNG Chunk Stream", rs));
规范
规范 |
---|
流标准 # ref-for-rs-pipe-through② |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
ReadableStream()
构造函数- 管道链