Spec-Zone.ru › Web APIs

TransformStreamDefaultController

Примечание: Эта функция доступна в Потоках выполнения JavaScript.

Интерфейс TransformStreamDefaultController API потоков предоставляет методы для управления связанным ReadableStream и WritableStream.

При создании TransformStream, создаётся TransformStreamDefaultController. Поэтому у него нет конструктора. Чтобы получить экземпляр TransformStreamDefaultController, используйте методы обратного вызова TransformStream().

Свойства экземпляра

TransformStreamDefaultController.desiredSize Только для чтения

Возвращает желаемый размер для заполнения очереди внутренней части потока со стороны чтения.

Методы экземпляра

TransformStreamDefaultController.enqueue()

Добавляет фрагмент (отдельное данные) в очередь части потока со стороны чтения.

TransformStreamDefaultController.error()

Вызывает ошибку как со стороны чтения, так и со стороны записи потока преобразования.

TransformStreamDefaultController.terminate()

Закрывает сторону чтения и вызывает ошибку на стороне записи потока.

Примеры

В следующем примере поток преобразования пропускает все полученные фрагменты в виде значений Uint8Array, используя методы error() и enqueue().

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

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
TransformStreamDefaultController 67 79 102 54 14.1 67 102 48 14.5 9.0 67
desiredSize 67 79 102 54 14.1 67 102 48 14.5 9.0 67
enqueue 67 79 102 54 14.1 67 102 48 14.5 9.0 67
error 67 79 102 54 14.1 67 102 48 14.5 9.0 67
terminate 67 79 102 54 14.1 67 102 48 14.5 9.0 67

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/TransformStreamDefaultController

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API