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②

瀏覽器相容性

另見