TransformStreamDefaultController

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

Streams APITransformStreamDefaultController 接口提供用于操作关联的 ReadableStreamWritableStream 的方法。

在构造 TransformStream 时,将创建 TransformStreamDefaultController。因此它没有构造函数。获取 TransformStreamDefaultController 实例的方法是通过 TransformStream() 的回调方法。

实例属性

TransformStreamDefaultController.desiredSize 只读

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

实例方法

TransformStreamDefaultController.enqueue()

在流的可读端入队一个块(单个数据片段)。

TransformStreamDefaultController.error()

将转换流的可读端和可写端都设为错误状态。

TransformStreamDefaultController.terminate()

关闭可读端,并将流的可写端设为错误状态。

示例

在以下示例中,转换流使用 error()enqueue() 方法,将所有接收到的块作为 Uint8Array 值传递。

js
const transformContent = {
  start() {}, // required.
  async transform(chunk, controller) {
    chunk = await chunk;
    switch (typeof chunk) {
      case "object":
        // just say the stream is done I guess
        if (chunk === null) {
          controller.terminate();
        } else if (ArrayBuffer.isView(chunk)) {
          controller.enqueue(
            new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength),
          );
        } else if (
          Array.isArray(chunk) &&
          chunk.every((value) => typeof value === "number")
        ) {
          controller.enqueue(new Uint8Array(chunk));
        } else if (
          typeof chunk.valueOf === "function" &&
          chunk.valueOf() !== chunk
        ) {
          this.transform(chunk.valueOf(), controller); // hack
        } else if ("toJSON" in chunk) {
          this.transform(JSON.stringify(chunk), controller);
        }
        break;
      case "symbol":
        controller.error("Cannot send a symbol as a chunk part");
        break;
      case "undefined":
        controller.error("Cannot send undefined as a chunk part");
        break;
      default:
        controller.enqueue(this.textencoder.encode(String(chunk)));
        break;
    }
  },
  flush() {
    /* do any destructor work here */
  },
};

class AnyToU8Stream extends TransformStream {
  constructor() {
    super({ ...transformContent, textencoder: new TextEncoder() });
  }
}

规范

规范
流标准
# ts-default-controller-class

浏览器兼容性

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