ReadableStreamDefaultController: enqueue() 方法

Baseline 已廣泛支援

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

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

ReadableStreamDefaultController 介面的 enqueue() 方法會將給定的 chunk 加入到關聯的流中。

語法

js
enqueue(chunk)

引數

chunk

要入隊的 chunk。

返回值

無(undefined)。

異常

TypeError

如果流已關閉、已取消或已出錯,或者底層源已請求關閉但由於仍有待讀取的入隊 chunk 而尚未完成,則呼叫 enqueue() 時會丟擲此錯誤。

示例

在以下簡單示例中,使用建構函式建立了一個自定義的 ReadableStream(有關完整程式碼,請參閱我們的 簡單隨機流示例)。start() 函式每秒生成一個隨機文字字串並將其入隊到流中 — 請參閱 controller.enqueue(string)。還提供了一個 cancel() 函式,以便在因任何原因呼叫 ReadableStream.cancel() 時停止生成。

當按下按鈕時,生成停止,使用 ReadableStreamDefaultController.close() 關閉流,並執行另一個函式,該函式將資料從流中讀回。

js
let interval;
const stream = new ReadableStream({
  start(controller) {
    interval = setInterval(() => {
      let string = randomChars();

      // Add the string to the stream
      controller.enqueue(string);

      // show it on the screen
      let listItem = document.createElement("li");
      listItem.textContent = string;
      list1.appendChild(listItem);
    }, 1000);

    button.addEventListener("click", () => {
      clearInterval(interval);
      fetchStream();
      controller.close();
    });
  },
  pull(controller) {
    // We don't really need a pull in this example
  },
  cancel() {
    // This is called if the reader cancels,
    // so we should stop generating strings
    clearInterval(interval);
  },
});

規範

規範
Streams
# ref-for-rs-default-controller-enqueue①

瀏覽器相容性

另見