ReadableStreamDefaultController

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

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

构造函数

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

实例属性

ReadableStreamDefaultController.desiredSize 只读

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

实例方法

ReadableStreamDefaultController.close()

关闭关联的流。

ReadableStreamDefaultController.enqueue()

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

ReadableStreamDefaultController.error()

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

示例

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

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅