Web Streams API¶
Добавлено в: v16.5.0
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Реализация стандарта WHATWG Streams.
Обзор¶
Стандарт WHATWG Streams («веб-потоки») задаёт API для работы с потоковыми данными. Он близок к API Streams в Node.js, но появился позже и стал распространённым «стандартным» API потоков во многих средах JavaScript.
Три основных типа объектов:
ReadableStream— источник потоковых данных.WritableStream— приёмник потоковых данных.TransformStream— алгоритм преобразования потоковых данных.
Пример ReadableStream¶
Пример создаёт простой ReadableStream, который каждую секунду помещает в очередь текущее значение performance.now(). Для чтения используется асинхронный итератор.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Совместимость с потоками Node.js¶
Потоки Node.js можно преобразовать в веб-потоки и обратно методами toWeb и fromWeb у stream.Readable, stream.Writable и stream.Duplex.
Подробнее в соответствующих разделах:
stream.Readable.toWebstream.Readable.fromWebstream.Writable.toWebstream.Writable.fromWebstream.Duplex.toWebstream.Duplex.fromWeb
API¶
Класс: ReadableStream¶
Добавлено в: v16.5.0
new ReadableStream([underlyingSource [, strategy]])¶
underlyingSource<Object>start<Function>Пользовательская функция, вызываемая сразу при созданииReadableStream.controller<ReadableStreamDefaultController>|<ReadableByteStreamController>- Возвращает:
undefinedили промис, выполняемый сundefined.
pull<Function>Пользовательская функция, вызываемая повторно, пока внутренняя очередьReadableStreamне заполнена. Операция может быть синхронной или асинхронной. Если асинхронная, функция не вызывается снова, пока не выполнится ранее возвращённый промис.controller<ReadableStreamDefaultController>|<ReadableByteStreamController>- Возвращает: промис, выполняемый с
undefined.
cancel<Function>Пользовательская функция, вызываемая при отменеReadableStream.reason<any>- Возвращает: промис, выполняемый с
undefined.
type<string>Должно быть'bytes'илиundefined.autoAllocateChunkSize<number>Используется только приtype, равном'bytes'. При ненулевом значении буфер представления автоматически выделяется дляReadableByteStreamController.byobRequest. Если не задано, данные передаются через внутренние очереди потока и обычный читательReadableStreamDefaultReader.strategy<Object>highWaterMark<number>Максимальный размер внутренней очереди до срабатывания обратного давления.size<Function>Пользовательская функция для определения размера каждого фрагмента данных.
readableStream.locked¶
- Тип:
<boolean>true, если для этого ReadableStream есть активный читатель.
Свойство readableStream.locked по умолчанию false и становится true, пока активный читатель потребляет данные потока.
readableStream.cancel([reason])¶
reason<any>- Возвращает: промис, выполняемый с
undefinedпосле завершения отмены.
readableStream.getReader([options])¶
options<Object>mode<string>'byob'илиundefined- Возвращает:
<ReadableStreamDefaultReader>|<ReadableStreamBYOBReader>
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
Устанавливает readableStream.locked в true.
readableStream.pipeThrough(transform[, options])¶
transform<Object>readable<ReadableStream>ReadableStream, в которыйtransform.writableпомещает возможно изменённые данные, полученные из этогоReadableStream.writable<WritableStream>WritableStream, в который записываются данные этогоReadableStream.options<Object>preventAbort<boolean>Еслиtrue, ошибки в этомReadableStreamне приводят к прерываниюtransform.writable.preventCancel<boolean>Еслиtrue, ошибки в целевомtransform.writableне отменяют этотReadableStream.preventClose<boolean>Еслиtrue, закрытие этогоReadableStreamне закрываетtransform.writable.signal<AbortSignal>Позволяет отменить передачу данных через AbortController.- Возвращает:
<ReadableStream>изtransform.readable.
Соединяет этот ReadableStream с парой ReadableStream и WritableStream из аргумента transform: данные из этого ReadableStream записываются в transform.writable, при необходимости преобразуются и попадают в transform.readable. После настройки конвейера возвращается transform.readable.
Пока активна операция pipe, readableStream.locked равен true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
readableStream.pipeTo(destination[, options])¶
destination<WritableStream>WritableStream, в который записываются данные этогоReadableStream.options<Object>preventAbort<boolean>Еслиtrue, ошибки в этомReadableStreamне приводят к прерываниюdestination.preventCancel<boolean>Еслиtrue, ошибки вdestinationне отменяют этотReadableStream.preventClose<boolean>Еслиtrue, закрытие этогоReadableStreamне закрываетdestination.signal<AbortSignal>Позволяет отменить передачу данных через AbortController.- Возвращает: промис, выполняемый с
undefined
Пока активна операция pipe, readableStream.locked равен true.
readableStream.tee()¶
Добавлено в: v16.5.0
- Возвращает:
<ReadableStream[]>
Возвращает пару новых экземпляров ReadableStream, в которые пересылаются данные этого ReadableStream. Оба получают одинаковые данные.
Устанавливает readableStream.locked в true.
readableStream.values([options])¶
options<Object>preventCancel<boolean>Еслиtrue, ReadableStream не закрывается при резком завершении асинхронного итератора. По умолчанию:false.
Создаёт и возвращает асинхронный итератор для чтения данных этого ReadableStream.
Пока активен асинхронный итератор, readableStream.locked равен true.
1 2 3 4 5 6 | |
Асинхронная итерация¶
Объект ReadableStream поддерживает протокол асинхронного итератора через синтаксис for await.
1 2 3 4 5 6 | |
Асинхронный итератор читает ReadableStream до его завершения.
По умолчанию при раннем выходе из итератора (break, return или throw) ReadableStream закрывается. Чтобы не закрывать ReadableStream автоматически, получите итератор через readableStream.values() и установите опцию preventCancel в true.
ReadableStream не должен быть заблокирован (не должно быть активного читателя). На время асинхронной итерации ReadableStream блокируется.
Передача через postMessage()¶
Экземпляр ReadableStream можно передать через MessagePort.
1 2 3 4 5 6 7 8 9 10 11 | |
ReadableStream.from(iterable)¶
iterable<Iterable>Объект, реализующий протокол итерируемостиSymbol.asyncIteratorилиSymbol.iterator.
Вспомогательный метод создаёт новый ReadableStream из итерируемого объекта.
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Чтобы направить получившийся ReadableStream в WritableStream, Iterable должен отдавать последовательность объектов Buffer, TypedArray или DataView.
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Класс: ReadableStreamDefaultReader¶
Добавлено в: v16.5.0
По умолчанию вызов readableStream.getReader() без аргументов возвращает экземпляр ReadableStreamDefaultReader. Обычный читатель обрабатывает фрагменты данных как непрозрачные значения, поэтому ReadableStream может работать с любыми значениями JavaScript.
new ReadableStreamDefaultReader(stream)¶
stream<ReadableStream>
Создаёт новый ReadableStreamDefaultReader, привязанный к заданному ReadableStream.
readableStreamDefaultReader.cancel([reason])¶
reason<any>- Возвращает: промис, выполняемый с
undefined.
Отменяет ReadableStream и возвращает промис, выполняемый после отмены нижележащего потока.
readableStreamDefaultReader.closed¶
- Тип:
<Promise>Выполняется сundefined, когда связанный ReadableStream закрыт, или отклоняется при ошибке потока или снятии блокировки читателя до завершения закрытия.
readableStreamDefaultReader.read()¶
Запрашивает следующий фрагмент данных из нижележащего ReadableStream и возвращает промис, выполняемый, когда данные доступны.
readableStreamDefaultReader.releaseLock()¶
Снимает блокировку этого читателя с нижележащего ReadableStream.
Класс: ReadableStreamBYOBReader¶
Добавлено в: v16.5.0
ReadableStreamBYOBReader — альтернативный потребитель для байто-ориентированных ReadableStream (создаются с underlyingSource.type, равным 'bytes' при создании ReadableStream).
BYOB — сокращение от «bring your own buffer». Это шаблон более эффективного чтения байтовых данных без лишнего копирования.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | |
new ReadableStreamBYOBReader(stream)¶
stream<ReadableStream>
Создаёт новый ReadableStreamBYOBReader, привязанный к заданному ReadableStream.
readableStreamBYOBReader.cancel([reason])¶
reason<any>- Возвращает: промис, выполняемый с
undefined.
Отменяет ReadableStream и возвращает промис, выполняемый после отмены нижележащего потока.
readableStreamBYOBReader.closed¶
- Тип:
<Promise>Выполняется сundefined, когда связанный ReadableStream закрыт, или отклоняется при ошибке потока или снятии блокировки читателя до завершения закрытия.
readableStreamBYOBReader.read(view[, options])¶
Добавлено в: v16.5.0
view<Buffer>|<TypedArray>|<DataView>options<Object>min<number>Если задано, промис выполнится только когда доступно не менееminэлементов. Если не задано, промис выполняется, когда доступен хотя бы один элемент.- Возвращает: промис, выполняемый с объектом:
value<TypedArray>|<DataView>done<boolean>
Запрашивает следующий фрагмент данных из нижележащего ReadableStream и возвращает промис, выполняемый, когда данные доступны.
Не передавайте в этот метод pooled-экземпляр Buffer. Pooled-Buffer создаются через Buffer.allocUnsafe(), Buffer.from() или часто возвращаются колбэками модуля node:fs. Такие Buffer разделяют общий ArrayBuffer, в котором лежат данные всех pooled-Buffer. Когда в readableStreamBYOBReader.read() передаётся Buffer, TypedArray или DataView, у представления отсоединяется (detach) базовый ArrayBuffer, с чего снимается действительность всех существующих представлений на этом ArrayBuffer. Это может привести к серьёзным сбоям в приложении.
readableStreamBYOBReader.releaseLock()¶
Снимает блокировку этого читателя с нижележащего ReadableStream.
Класс: ReadableStreamDefaultController¶
У каждого ReadableStream есть контроллер, отвечающий за внутреннее состояние и очередь потока. ReadableStreamDefaultController — контроллер по умолчанию для не байто-ориентированных ReadableStream.
readableStreamDefaultController.close()¶
Закрывает ReadableStream, с которым связан этот контроллер.
readableStreamDefaultController.desiredSize¶
- Тип:
<number>
Возвращает объём данных, которого не хватает до заполнения очереди ReadableStream.
readableStreamDefaultController.enqueue([chunk])¶
chunk<any>
Добавляет новый фрагмент данных в очередь ReadableStream.
readableStreamDefaultController.error([error])¶
error<any>
Сообщает об ошибке: ReadableStream переходит в ошибку и закрывается.
Класс: ReadableByteStreamController¶
Добавлено в: v16.5.0
У каждого ReadableStream есть контроллер, отвечающий за внутреннее состояние и очередь потока. ReadableByteStreamController — для байто-ориентированных ReadableStream.
readableByteStreamController.byobRequest¶
readableByteStreamController.close()¶
Закрывает ReadableStream, с которым связан этот контроллер.
readableByteStreamController.desiredSize¶
- Тип:
<number>
Возвращает объём данных, которого не хватает до заполнения очереди ReadableStream.
readableByteStreamController.enqueue(chunk)¶
chunk<Buffer>|<TypedArray>|<DataView>
Добавляет новый фрагмент данных в очередь ReadableStream.
readableByteStreamController.error([error])¶
error<any>
Сообщает об ошибке: ReadableStream переходит в ошибку и закрывается.
Класс: ReadableStreamBYOBRequest¶
Добавлено в: v16.5.0
При использовании ReadableByteStreamController в байто-ориентированных потоках и при использовании ReadableStreamBYOBReader свойство readableByteStreamController.byobRequest даёт доступ к экземпляру ReadableStreamBYOBRequest, соответствующему текущему запросу чтения. Объект нужен для доступа к ArrayBuffer/TypedArray, выделенным под заполнение при чтении, и содержит методы сигнализации о том, что данные уже записаны.
readableStreamBYOBRequest.respond(bytesWritten)¶
bytesWritten<number>
Сообщает, что в readableStreamBYOBRequest.view записано bytesWritten байт.
readableStreamBYOBRequest.respondWithNewView(view)¶
view<Buffer>|<TypedArray>|<DataView>
Сообщает, что запрос выполнен: данные записаны в новый Buffer, TypedArray или DataView.
readableStreamBYOBRequest.view¶
- Тип:
<Buffer>|<TypedArray>|<DataView>
Класс: WritableStream¶
Добавлено в: v16.5.0
WritableStream — приёмник, в который отправляются данные потока.
1 2 3 4 5 6 7 8 9 10 11 | |
new WritableStream([underlyingSink[, strategy]])¶
underlyingSink<Object>start<Function>Пользовательская функция, вызываемая сразу при созданииWritableStream.controller<WritableStreamDefaultController>- Возвращает:
undefinedили промис, выполняемый сundefined.
write<Function>Пользовательская функция, вызываемая при записи фрагмента данных вWritableStream.chunk<any>controller<WritableStreamDefaultController>- Возвращает: промис, выполняемый с
undefined.
close<Function>Пользовательская функция, вызываемая при закрытииWritableStream.- Возвращает: промис, выполняемый с
undefined.
- Возвращает: промис, выполняемый с
abort<Function>Пользовательская функция для немедленного закрытияWritableStream.reason<any>- Возвращает: промис, выполняемый с
undefined.
type<any>Опцияtypeзарезервирована и должна бытьundefined.strategy<Object>highWaterMark<number>Максимальный размер внутренней очереди до срабатывания обратного давления.size<Function>Пользовательская функция для определения размера каждого фрагмента данных.
writableStream.abort([reason])¶
reason<any>- Возвращает: промис, выполняемый с
undefined.
Немедленно завершает WritableStream. Все запросы записи в очереди отменяются, связанные с ними промисы отклоняются.
writableStream.close()¶
- Возвращает: промис, выполняемый с
undefined.
Закрывает WritableStream, когда дальнейшая запись не ожидается.
writableStream.getWriter()¶
- Возвращает:
<WritableStreamDefaultWriter>
Создаёт и возвращает новый writer для записи данных в WritableStream.
writableStream.locked¶
- Тип:
<boolean>
Свойство writableStream.locked по умолчанию false и становится true, пока к этому WritableStream привязан активный writer.
Передача через postMessage()¶
Экземпляр WritableStream можно передать через MessagePort.
1 2 3 4 5 6 7 8 9 | |
Класс: WritableStreamDefaultWriter¶
Добавлено в: v16.5.0
new WritableStreamDefaultWriter(stream)¶
stream<WritableStream>
Создаёт новый WritableStreamDefaultWriter, привязанный к заданному WritableStream.
writableStreamDefaultWriter.abort([reason])¶
reason<any>- Возвращает: промис, выполняемый с
undefined.
Немедленно завершает WritableStream. Все запросы записи в очереди отменяются, связанные с ними промисы отклоняются.
writableStreamDefaultWriter.close()¶
- Возвращает: промис, выполняемый с
undefined.
Закрывает WritableStream, когда дальнейшая запись не ожидается.
writableStreamDefaultWriter.closed¶
- Тип:
<Promise>Выполняется сundefined, когда связанный WritableStream закрыт, или отклоняется при ошибке потока или снятии блокировки writer до завершения закрытия.
writableStreamDefaultWriter.desiredSize¶
- Тип:
<number>
Объём данных, необходимый для заполнения очереди WritableStream.
writableStreamDefaultWriter.ready¶
- Тип:
<Promise>Выполняется со значениемundefined, когда writer готов к использованию.
writableStreamDefaultWriter.releaseLock()¶
Снимает блокировку этого writer с нижележащего WritableStream.
writableStreamDefaultWriter.write([chunk])¶
chunk<any>- Возвращает: промис, выполняемый с
undefined.
Ставит в очередь новый фрагмент данных для записи в WritableStream.
Класс: WritableStreamDefaultController¶
Добавлено в: v16.5.0
WritableStreamDefaultController управляет внутренним состоянием WritableStream.
writableStreamDefaultController.error([error])¶
error<any>
Вызывается из кода пользователя, чтобы сообщить об ошибке при обработке данных WritableStream. При вызове WritableStream прерывается, текущие запросы записи отменяются.
writableStreamDefaultController.signal¶
- Тип:
<AbortSignal>AbortSignalдля отмены ожидающих операций записи или закрытия при прерывании WritableStream.
Класс: TransformStream¶
Добавлено в: v16.5.0
TransformStream объединяет ReadableStream и WritableStream, соединённые так, что данные, записанные в WritableStream, поступают и при необходимости преобразуются перед помещением в очередь ReadableStream.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
new TransformStream([transformer[, writableStrategy[, readableStrategy]]])¶
Добавлено в: v16.5.0
transformer<Object>start<Function>Пользовательская функция, вызываемая сразу при созданииTransformStream.controller<TransformStreamDefaultController>- Возвращает:
undefinedили промис, выполняемый сundefined
transform<Function>Пользовательская функция: получает и при необходимости изменяет фрагмент данных, записанный вtransformStream.writable, затем передаёт его вtransformStream.readable.chunk<any>controller<TransformStreamDefaultController>- Возвращает: промис, выполняемый с
undefined.
flush<Function>Пользовательская функция, вызываемая непосредственно перед закрытием записывающей стороныTransformStream, сигнализируя о завершении преобразования.controller<TransformStreamDefaultController>- Возвращает: промис, выполняемый с
undefined.
cancel<Function>Пользовательская функция при отмене читающей стороныTransformStreamили прерывании записывающей.reason<any>- Возвращает: промис, выполняемый с
undefined.
readableType<any>опцияreadableTypeзарезервирована и должна бытьundefined.writableType<any>опцияwritableTypeзарезервирована и должна бытьundefined.writableStrategy<Object>highWaterMark<number>Максимальный размер внутренней очереди до срабатывания обратного давления.size<Function>Пользовательская функция для определения размера каждого фрагмента данных.readableStrategy<Object>highWaterMark<number>Максимальный размер внутренней очереди до срабатывания обратного давления.size<Function>Пользовательская функция для определения размера каждого фрагмента данных.
transformStream.readable¶
- Тип:
<ReadableStream>
transformStream.writable¶
- Тип:
<WritableStream>
Передача через postMessage()¶
Экземпляр TransformStream можно передать через MessagePort.
1 2 3 4 5 6 7 8 9 10 | |
Класс: TransformStreamDefaultController¶
Добавлено в: v16.5.0
TransformStreamDefaultController управляет внутренним состоянием TransformStream.
transformStreamDefaultController.desiredSize¶
- Тип:
<number>
Объём данных, необходимый для заполнения очереди читающей стороны.
transformStreamDefaultController.enqueue([chunk])¶
chunk<any>
Добавляет фрагмент данных в очередь читающей стороны.
transformStreamDefaultController.error([reason])¶
reason<any>
Сообщает об ошибке на читающей и записывающей сторонах при обработке данных трансформации; обе стороны немедленно закрываются.
transformStreamDefaultController.terminate()¶
Закрывает читающую сторону и приводит к немедленному закрытию записывающей стороны с ошибкой.
Класс: ByteLengthQueuingStrategy¶
Добавлено в: v16.5.0
new ByteLengthQueuingStrategy(init)¶
byteLengthQueuingStrategy.highWaterMark¶
- Тип:
<number>
byteLengthQueuingStrategy.size¶
- Тип:
<Function> chunk<any>- Возвращает:
<number>
Класс: CountQueuingStrategy¶
Добавлено в: v16.5.0
new CountQueuingStrategy(init)¶
countQueuingStrategy.highWaterMark¶
- Тип:
<number>
countQueuingStrategy.size¶
- Тип:
<Function> chunk<any>- Возвращает:
<number>
Класс: TextEncoderStream¶
Добавлено в: v16.6.0
new TextEncoderStream()¶
Создаёт новый экземпляр TextEncoderStream.
textEncoderStream.encoding¶
- Тип:
<string>
Кодировка, поддерживаемая экземпляром TextEncoderStream.
textEncoderStream.readable¶
- Тип:
<ReadableStream>
textEncoderStream.writable¶
- Тип:
<WritableStream>
Класс: TextDecoderStream¶
Добавлено в: v16.6.0
new TextDecoderStream([encoding[, options]])¶
encoding<string>Кодировка, которую поддерживает этотTextDecoder. По умолчанию:'utf-8'.options<Object>fatal<boolean>true, если ошибки декодирования фатальны.ignoreBOM<boolean>Еслиtrue,TextDecoderStreamвключает метку порядка байтов в результат. Еслиfalse, метка удаляется из вывода. Опция используется только приencoding'utf-8','utf-16be'или'utf-16le'. По умолчанию:false.
Создаёт новый экземпляр TextDecoderStream.
textDecoderStream.encoding¶
- Тип:
<string>
Кодировка, поддерживаемая экземпляром TextDecoderStream.
textDecoderStream.fatal¶
- Тип:
<boolean>
true, если при ошибках декодирования выбрасывается TypeError.
textDecoderStream.ignoreBOM¶
- Тип:
<boolean>
true, если в результат декодирования включается метка порядка байтов.
textDecoderStream.readable¶
- Тип:
<ReadableStream>
textDecoderStream.writable¶
- Тип:
<WritableStream>
Класс: CompressionStream¶
Добавлено в: v17.0.0
new CompressionStream(format)¶
Добавлено в: v17.0.0
format<string>Одно из'deflate','deflate-raw','gzip'или'brotli'.
compressionStream.readable¶
- Тип:
<ReadableStream>
compressionStream.writable¶
- Тип:
<WritableStream>
Класс: DecompressionStream¶
Добавлено в: v17.0.0
new DecompressionStream(format)¶
Добавлено в: v17.0.0
format<string>Одно из'deflate','deflate-raw','gzip'или'brotli'.
decompressionStream.readable¶
- Тип:
<ReadableStream>
decompressionStream.writable¶
- Тип:
<WritableStream>
Утилиты-потребители¶
Вспомогательные функции-потребители задают общие варианты чтения потоков.
Импорт:
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
streamConsumers.arrayBuffer(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>выполняется сArrayBuffer, содержащим полное содержимое потока.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
streamConsumers.blob(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>выполняется с Blob, содержащим полное содержимое потока.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 | |
streamConsumers.buffer(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>выполняется с Buffer, содержащим полное содержимое потока.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
streamConsumers.bytes(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>выполняется с Uint8Array, содержащим полное содержимое потока.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
streamConsumers.json(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>содержимое потока как UTF-8 строка, затем результатJSON.parse().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
streamConsumers.text(stream)¶
stream<ReadableStream>|<stream.Readable>|<AsyncIterator>- Возвращает:
<Promise>содержимое потока как UTF-8 строка.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 | |