ReadableStream: pipeTo() 方法

Baseline 已广泛支持

此功能已成熟,并可在许多设备和浏览器版本上使用。自 2022 年 5 月以来,它已在各个浏览器中可用。

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

WritableStream 接口的 pipeTo() 方法将当前的 ReadableStream 管道传输到指定的 WritableStream,并返回一个 Promise。当管道传输成功完成时,该 Promise 将 fulfilled;如果在过程中遇到任何错误,则会 rejected。

管道传输流通常会 锁定 该流,直到管道传输结束,阻止其他读取器锁定它。

语法

js
pipeTo(destination)
pipeTo(destination, options)

参数

destination

作为 ReadableStream 最终目的地的 WritableStream

options 可选

管道传输到 writable 流时应使用的选项。可用选项包括:

preventClose

如果设置为 true,源 ReadableStream 关闭将不再导致目标 WritableStream 关闭。一旦此过程完成,该方法将返回一个 fulfilled 的 promise,除非在关闭目标时遇到错误,在这种情况下,它将以该错误被 rejected。

preventAbort

如果设置为 true,源 ReadableStream 中的错误将不再中止目标 WritableStream。该方法将返回一个被 rejected 的 promise,其中包含源的错误,或在中止目标过程中发生的任何错误。

preventCancel

如果设置为 true,目标 WritableStream 中的错误将不再取消源 ReadableStream。在这种情况下,该方法将返回一个被 rejected 的 promise,其中包含源的错误,或在取消源过程中发生的任何错误。此外,如果目标可写流最初就是关闭或正在关闭的状态,则源可读流将不再被取消。在这种情况下,该方法将返回一个被 rejected 的 promise,其中包含一个指示管道传输到已关闭流失败的错误,或在取消源过程中发生的任何错误。

signal

如果设置为 AbortSignal 对象,则可以通过相应的 AbortController 中止正在进行的管道传输操作。

返回值

管道传输过程完成后解析的 Promise

异常

TypeError

writableStream 和/或 readableStream 对象不是可写流/可读流,或者一个或两个流已被锁定。

示例

js
// Fetch the original image
fetch("png-logo.png")
  // Retrieve its body as ReadableStream
  .then((response) => response.body)
  .then((body) => body.pipeThrough(new PNGTransformStream()))
  .then((rs) => rs.pipeTo(new FinalDestinationStream()));

使用 await 的相同示例。

js
(async () => {
  // Fetch the original image
  const response = await fetch("png-logo.png");
  // Retrieve its body as ReadableStream
  await response.body
    .pipeThrough(new PNGTransformStream())
    .pipeTo(new FinalDestinationStream());
})();

规范

规范
Streams
# ref-for-rs-pipe-to④

浏览器兼容性

另见