ReadableStreamDefaultController

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

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

ReadableStreamDefaultController 接口是 Streams API 的一部分,它表示一个控制器,允许控制 ReadableStream 的状态和内部队列。默认控制器适用于非字节流。

构造函数

无。ReadableStreamDefaultController 实例在 ReadableStream 构建期间自动创建。

实例属性

ReadableStreamDefaultController.desiredSize 只读

返回填充流内部队列所需的期望大小。

实例方法

ReadableStreamDefaultController.close()

关闭关联的流。

ReadableStreamDefaultController.enqueue()

将给定的块排队到关联的流中。

ReadableStreamDefaultController.error()

导致与关联流的任何未来交互都发生错误。

示例

在下面的简单示例中,使用构造函数创建了一个自定义的 ReadableStream(有关完整代码,请参阅我们的 简单随机流示例)。start() 函数每秒生成一个随机文本字符串并将其入队到流中。还提供了一个 cancel() 函数,以便在出于任何原因调用 ReadableStream.cancel() 时停止生成。

请注意,ReadableStreamDefaultController 对象会作为 start()pull() 函数的参数提供。

当按下按钮时,生成停止,使用 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
# rs-default-controller-class

浏览器兼容性

另见