ReadableStream: pipeThrough() 方法

Baseline 已广泛支持

此特性已得到充分确立,可在多种设备和浏览器版本上运行。自 ⁨2022 年 6 月⁩起,所有浏览器均支持此特性。

注意:此功能在 Web Workers 中可用。

ReadableStream 接口的 pipeThrough() 方法提供了一种链式方式,可以将当前流通过一个转换流或任何其他可写/可读对进行管道传输。

通常,管道传输流会将其锁定,直到管道传输完成,阻止其他读取器锁定它。

语法

js
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 来中止正在进行的管道传输操作。

返回值

transformStreamreadable 端。

异常

TypeError

如果 transformStreamwritable 和/或 readable 属性未定义,则会抛出此错误。

示例

在下面的示例中(完整的实时代码请参见 Unpack chunks of a PNG,源代码请参见 png-transform-stream),会获取一个图像,并将其主体检索为 ReadableStream

接下来,我们将记录可读流的内容,使用 pipeThrough() 将其发送到一个创建流的灰度版本的新函数,然后也记录新流的内容。

js
// 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));

规范

规范
Streams
# ref-for-rs-pipe-through②

浏览器兼容性

另见