Spec-Zone.ru › Web APIs

TransformStream

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

Интерфейс TransformStream из API потоков представляет собой конкретное реализацию концепции потока преобразования цепочки обработки данных.

Он может быть передан методу ReadableStream.pipeThrough() для преобразования потока данных из одного формата в другой. Например, он может использоваться для декодирования (или кодирования) видеокадров, декомпрессии данных или преобразования потока из XML в JSON.

Алгоритм преобразования может быть передан в качестве необязательного аргумента конструктору объекта. Если он не указан, данные не изменяются при прохождении через поток.

TransformStream — это передающийся объект.

Конструктор

TransformStream()

Создаёт и возвращает объект потока преобразования, необязательно указывая объект преобразования и стратегии очередей для потоков.

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

TransformStream.readable Только для чтения

Конец readable в TransformStream.

TransformStream.writable Только для чтения

Конец writable в TransformStream.

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

Нет

Примеры

Поток «Любой тип данных в Uint8Array»

В следующем примере поток преобразования проходит через все полученные куски данных как значения Uint8Array.

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

Цепочкирование нескольких ReadableStreams

Это полезный пример, где можно соединять несколько потоков. Примеры включают создание PWA с поэтапной загрузкой и поэтапной трансляцией.

let responses = [
  /* conjoined response tree */
];
let { readable, writable } = new TransformStream();

responses.reduce(
  (a, res, i, arr) =>
    a.then(() => res.pipeTo(writable, { preventClose: i + 1 !== arr.length })),
  Promise.resolve(),
);

Обратите внимание, что это не устойчиво к другим воздействиям.

Спецификации

Спецификация
Потоки
# ts-class

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
TransformStream 67 79 102 54 14.1 67 102 48 14.5 9.0 67
TransformStream 67 79 102 54 14.1 67 102 48 14.5 9.0 67
readable 67 79 102 54 14.1 67 102 48 14.5 9.0 67
transferable 87 87 103 73 Нет 87 103 62 Нет 14.0 87
writable 67 79 102 54 14.1 67 102 48 14.5 9.0 67

См. также

  • WHATWG Визуализатор потоков, для базовой визуализации потоков для чтения, записи и преобразования.
  • Потоки — Полное руководство

© 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/TransformStream

Spec-Zone.ru

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