ReadableStream: pipeTo() 方法

基线 2022

新可用

自从 2022 年 6 月, 此功能在最新的设备和浏览器版本中有效。此功能可能无法在较旧的设备或浏览器中使用。

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

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

管道流通常会 锁定 它在管道持续时间内,阻止其他读取器锁定它。

语法

js
pipeTo(destination)
pipeTo(destination, options)

参数

destination

一个 WritableStream,作为 ReadableStream 的最终目的地。

options 可选

管道到 writable 流时应使用的选项。可用的选项是

preventClose

如果将其设置为 true,源 ReadableStream 关闭将不再导致目标 WritableStream 关闭。此方法将在此过程完成后返回已完成的 Promise,除非在关闭目标时遇到错误,在这种情况下,它将使用该错误被拒绝。

preventAbort

如果将其设置为 true,源 ReadableStream 中的错误将不再中止目标 WritableStream。此方法将返回一个 Promise,该 Promise 被源错误或中止目标期间发生的任何错误拒绝。

preventCancel

如果将其设置为 true,目标 WritableStream 中的错误将不再取消源 ReadableStream。在这种情况下,此方法将返回一个 Promise,该 Promise 被源错误或取消源期间发生的任何错误拒绝。此外,如果目标可写流从关闭或关闭开始,源可读流将不再被取消。在这种情况下,该方法将返回一个 Promise,该 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());
})();

规范

规范
流标准
# ref-for-rs-pipe-to④

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅