TransformStreamDefaultController
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juni 2022.
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.desiredSizeSchreibgeschü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.
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> # ts-default-controller-class> |
Browser-Kompatibilität
Loading…