ReadableStreamDefaultController: enqueue() 方法

Baseline 已广泛支持

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

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

ReadableStreamDefaultController 接口的 enqueue() 方法会将给定的 chunk 加入到关联的流中。

语法

js
enqueue(chunk)

参数

chunk

要入队的 chunk。

返回值

无(undefined)。

异常

TypeError

如果流已关闭、已取消或已出错,或者底层源已请求关闭但由于仍有待读取的入队 chunk 而尚未完成,则调用 enqueue() 时会抛出此错误。

示例

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

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

浏览器兼容性

另见