可读流:pipeThrough() 方法

基线 2022

新可用

2022 年 6 月起,此功能在最新的设备和浏览器版本中都可以使用。 此功能可能无法在旧设备或浏览器中使用。

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

pipeThrough() 方法是 ReadableStream 接口的一种链式方法,用于将当前流通过变换流或任何其他可写/可读对进行管道传输。

对流进行管道传输通常会在管道持续时间内将其锁定,从而阻止其他读取器锁定它。

语法

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 属性未定义,则会抛出该异常。

示例

在以下示例中(有关完整的代码运行,请参见 解压缩 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));

规范

规范
流标准
# ref-for-rs-pipe-through②

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅