ReadableStreamDefaultController

Stream API 中的 ReadableStreamDefaultController 接口是一个控制器,该控制器允许控制 ReadableStream 的状态和内部队列。默认控制器用于不是字节流的流。

构造函数

无。ReadableStreamDefaultController 实例会在构造 ReadableStream 时被自动创造。

实例属性

ReadableStreamDefaultController.desiredSize 只读

返回填充满流的内部队列所需要的大小。

实例方法

ReadableStreamDefaultController.close()

关闭关联的流。

ReadableStreamDefaultController.enqueue()

将给定的块排入关联的流。

ReadableStreamDefaultController.error()

导致未来任何与关联流交互都会出错。

示例

在下面的简单示例中,使用构造函数创建一个自定义的 ReadableStream (有关完整代码,参见我们的简单随机流展示)。start() 函数每秒生成一个随机字符串并且将他们送入流中。cancel() 函数用于在 ReadableStream.cancel() 被调用时停止随机字符串的生成。

请注意,ReadableStreamDefaultController 对象应作为参数传递给 start()pull() 函数。

当按下按钮时,将停止生成,使用 ReadableStreamDefaultController.close() 关闭流,并运行另一个将数据读回流中的函数。

js
const stream = new ReadableStream({
  start(controller) {
    interval = setInterval(() => {
      let string = randomChars();
      // 将随机字符串添加到流
      controller.enqueue(string);
      // 在屏幕上展示
      let listItem = document.createElement("li");
      listItem.textContent = string;
      list1.appendChild(listItem);
    }, 1000);
    button.addEventListener("click", function () {
      clearInterval(interval);
      fetchStream();
      controller.close();
    });
  },
  pull(controller) {
    // 在这个例子中不使用 pull
  },
  cancel() {
    // 如果取消了 reader,则会调用该函数,
    // 所以我们应该在这里停止生成字符串
    clearInterval(interval);
  },
});

规范

Specification
Streams Standard
# rs-default-controller-class

浏览器兼容性

BCD tables only load in the browser

参见