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④

瀏覽器相容性

另見