TransformStreamDefaultController

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Das TransformStreamDefaultController-Interface der Streams API bietet Methoden zur Manipulation des zugehörigen ReadableStream und WritableStream.

Beim Erstellen eines TransformStream wird das TransformStreamDefaultController erstellt. Es hat daher keinen Konstruktor. Eine Instanz von TransformStreamDefaultController erhält man über die Callback-Methoden von TransformStream().

Instanzeigenschaften

TransformStreamDefaultController.desiredSize Schreibgeschützt

Gibt die gewünschte Größe zurück, um die lesbare Seite der internen Warteschlange des Streams zu füllen.

Instanzmethoden

TransformStreamDefaultController.enqueue()

Stellt ein Chunk (einzelnes Datenstück) in der lesbaren Seite des Streams in die Warteschlange.

TransformStreamDefaultController.error()

Fehler sowohl die lesbare als auch die beschreibbare Seite des Transform-Streams.

TransformStreamDefaultController.terminate()

Schließt die lesbare Seite und fehlerhaft die beschreibbare Seite des Streams.

Beispiele

Im folgenden Beispiel leitet ein Transform-Stream alle empfangenen Chunks als Uint8Array-Werte weiter, wobei die Methoden error() und enqueue() verwendet werden.

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

Spezifikationen

Specification
Streams Standard
# ts-default-controller-class

Browser-Kompatibilität

BCD tables only load in the browser