WritableStream

Baseline 广泛可用 *

此功能已成熟,并可在许多设备和浏览器版本上使用。自 2022 年 5 月以来,它已在各个浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

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

WritableStream 接口是 Streams API 的一部分,它提供了一个标准的抽象,用于将流式数据写入一个称为“接收器”(sink)的目标。该对象内置了反压和队列机制。

WritableStream 是一个 可转移对象

构造函数

WritableStream()

创建一个新的 WritableStream 对象。

实例属性

WritableStream.locked 只读

一个布尔值,指示 WritableStream 是否已锁定到一个写入器。

实例方法

WritableStream.abort()

中止流,通知生产者无法再成功写入流,并且流将立即进入错误状态,丢弃所有排队的写入操作。

WritableStream.close()

关闭流。

WritableStream.getWriter()

返回一个 WritableStreamDefaultWriter 的新实例,并将流锁定到该实例。在流被锁定的期间,在当前写入器释放之前,无法获取其他写入器。

示例

下面的示例演示了此接口的几个功能。它使用自定义接收器创建 WritableStream。然后调用流的 getWriter() 方法,该方法返回一个 WritableStreamDefaultWriter 的实例。接下来,向流写入几个字符串。最后,close() 返回一个 Promise,该 Promise 在所有写入成功完成后解析。

js
const writableStream = new WritableStream(
  // Implement the sink
  {
    write(chunk) {
      const textElement = document.getElementById("text-output");
      textElement.textContent += chunk;
    },
  },
);

const writer = writableStream.getWriter();

try {
  writer.write("Hello, ");
  writer.write("world!\n");
  writer.write("This has been a demo!\n");

  await writer.close(); // wait for all chunks to be written
  console.log("All chunks written");
} catch (error) {
  console.error("Stream error: ", error);
}

此示例不支持 Streams 的 反压 功能。

规范

规范
Streams
# ws-class

浏览器兼容性

另见