ReadableStreamDefaultReader

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

* 此特性的某些部分可能存在不同級別的支援。

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

ReadableStreamDefaultReader 介面是 Streams API 的一部分,它表示一個預設的讀取器,可用於讀取從網路(例如 fetch 請求)提供的資料流。

ReadableStreamDefaultReader 可用於讀取任何型別的底層資料來源的 ReadableStream(與只能用於具有底層位元組源的可讀流的 ReadableStreamBYOBReader 不同)。

但請注意,僅當底層源是自動分配緩衝區的底層位元組源時,才支援從底層源進行零複製傳輸。換句話說,該流必須在 構造 時同時指定 type="bytes"autoAllocateChunkSize。對於任何其他底層源,流將始終透過內部佇列中的資料來滿足讀取請求。

建構函式

ReadableStreamDefaultReader()

建立並返回一個 ReadableStreamDefaultReader 物件例項。

例項屬性

ReadableStreamDefaultReader.closed 只讀

返回一個 Promise,當流關閉時,該 Promise 會 fulfilled;如果流丟擲錯誤或讀取器的鎖被釋放,則會 rejected。此屬性使您能夠編寫響應流結束的程式碼。

例項方法

ReadableStreamDefaultReader.cancel()

返回一個 Promise,當流被取消時解析。呼叫此方法表示消費者對該流不再感興趣。提供的 reason 引數將傳遞給底層源,源可能會也可能不會使用它。

ReadableStreamDefaultReader.read()

返回一個 Promise,提供對流內部佇列中下一個塊的訪問。

ReadableStreamDefaultReader.releaseLock()

釋放讀取器對流的鎖定。

示例

在以下示例中,建立了一個人工 Response,用於將從另一個資源獲取的 HTML 片段流式傳輸到瀏覽器。

它演示了 ReadableStreamUint8Array 結合使用的用法。

js
fetch("https://www.example.org/").then((response) => {
  const reader = response.body.getReader();
  const stream = new ReadableStream({
    start(controller) {
      // The following function handles each data chunk
      function push() {
        // "done" is a Boolean and value a "Uint8Array"
        return reader.read().then(({ done, value }) => {
          // Is there no more data to read?
          if (done) {
            // Tell the browser that we have finished sending data
            controller.close();
            return;
          }

          // Get the data and send it to the browser via the controller
          controller.enqueue(value);
          push();
        });
      }

      push();
    },
  });

  return new Response(stream, { headers: { "Content-Type": "text/html" } });
});

規範

規範
Streams
# default-reader-class

瀏覽器相容性

另見