ReadableStreamDefaultController: close() 方法

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

ReadableStreamDefaultController 接口的 close() 方法关闭关联的流。

读取器仍然可以从流中读取以前排队的块,但是一旦这些块被读取,流将变为关闭状态。如果您想完全删除流并丢弃任何排队的块,可以使用 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);
  },
});

规范

规范
流标准
# ref-for-rs-default-controller-close①

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅