ReadableStreamDefaultController: close() 方法

Baseline 已廣泛支援

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

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

ReadableStreamDefaultController 介面的 close() 方法會關閉關聯的流。

讀者仍然可以讀取流中先前已入隊(enqueued)的任何塊,但一旦這些塊被讀取完畢,流就會關閉。如果你想完全丟棄流並丟棄任何已入隊的塊,你應該使用 ReadableStream.cancel()ReadableStreamDefaultReader.cancel()

語法

js
close()

引數

無。

返回值

無(undefined)。

異常

TypeError

如果流不可讀時呼叫 close(),則會丟擲錯誤——因為流已經關閉、取消或出錯,或者因為底層源已請求關閉但尚未完成,因為仍有待讀取的已入隊塊。

示例

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

按下按鈕時,會停止生成,使用 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-close①

瀏覽器相容性

另見