此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

ReadableStreamDefaultController

基线
广泛可用

自 2020年1月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

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);
  },
});

规范

规范
Streams
# rs-default-controller-class

浏览器兼容性

参见