Веб-потоки¶
Стабильность: 1 – Экспериментальная
Фича изменяется и не допускается флагом командной строки. Может быть изменена или удалена в последующих версиях.
Реализация WHATWG Streams Standard.
Обзор¶
Стандарт WHATWG Streams Standard (или "веб-потоки") определяет API для работы с потоковыми данными. Он похож на API Node.js Streams, но появился позже и стал "стандартным" 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 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
API¶
Класс: ReadableStream
¶
новый ReadableStream([underlyingSource [, strategy]])
¶
underlyingSource
<Object>
start
<Function>
Определяемая пользователем функция, которая вызывается сразу после созданияReadableStream
.controller
{ReadableStreamDefaultController|ReadableByteStreamController}- Возвращает:
undefined
или обещание, выполненное сundefined
.
pull
<Function>
Определяемая пользователем функция, которая вызывается многократно, когда внутренняя очередьReadableStream
не заполнена. Операция может быть синхронной или асинхронной. Если async, то функция не будет вызываться снова, пока не будет выполнено ранее возвращенное обещание.controller
{ReadableStreamDefaultController|ReadableByteStreamController}- Возвращает: Обещание, выполненное с
undefined
.
cancel
<Function>
Определяемая пользователем функция, которая вызывается при отменеReadableStream
.reason
{любая}- Возвращает: Обещание, выполненное с
undefined
.
type
<string>
Должно быть'bytes
илиundefined
.autoAllocateChunkSize
<number>
Используется только когдаtype
равен'bytes'
.
strategy
<Object>
highWaterMark
<number>
Максимальный размер внутренней очереди перед применением противодавления.size
<Function>
Определяемая пользователем функция, используемая для определения размера каждого куска данных.
readableStream.locked
¶
- Тип:
<boolean>
Устанавливается вtrue
, если существует активный читатель для данного<ReadableStream>
.
По умолчанию свойство readableStream.locked
имеет значение false
, и переключается на true
, если есть активный читатель, потребляющий данные потока.
readableStream.cancel([reason])
¶
reason
{любая}- Возвращает: Обещание, выполненное с
undefined
после завершения отмены.
readableStream.getReader([options])
¶
options
<Object>
mode
<string>
'byob
илиundefined
- Возвращает: {ReadableStreamDefaultReader|ReadableStreamBYOBReader}
1 2 3 4 5 6 |
|
1 2 3 4 5 6 |
|
Приводит 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
.
Заставляет readableStream.locked
быть true
, пока активна операция конвейера.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
readableStream.pipeTo(destination[, options])
¶
destination
{WritableStream} {WritableStream}, в который будут записаны данные этогоReadableStream
.options
<Object>
preventAbort
<boolean>
Еслиtrue
, ошибки в этомReadableStream
не приведут к прерываниюdestination
.preventCancel
<boolean>
Когдаtrue
, ошибки вназначении
не приведут к отмене этогоReadableStream
.preventClose
<boolean>
Еслиtrue
, закрытие этогоReadableStream
не приведет к закрытиюdestination
.signal
<AbortSignal>
Позволяет отменить передачу данных с помощью {AbortController}.
- Возвращает: Обещание, выполненное с
undefined
.
Приводит readableStream.locked
к значению true
, пока активна операция pipe.
readableStream.tee()
¶
- Возвращает: {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 7 8 |
|
Асинхронная итерация¶
Объект <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 12 13 14 15 |
|
Класс: ReadableStreamDefaultReader
¶
По умолчанию вызов readableStream.getReader()
без аргументов возвращает экземпляр ReadableStreamDefaultReader
. Читатель по умолчанию рассматривает куски данных, передаваемые через поток, как непрозрачные значения, что позволяет <ReadableStream>
работать с любыми значениями JavaScript.
new ReadableStreamDefaultReader(stream)
¶
stream
<ReadableStream>
Создает новый {ReadableStreamDefaultReader}, который привязан к заданному <ReadableStream>
.
readableStreamDefaultReader.cancel([reason])
¶
reason
{любая}- Возвращает: Обещание, выполненное с
undefined
.
Отменяет <ReadableStream>
и возвращает обещание, которое выполняется, если базовый поток был отменен.
readableStreamDefaultReader.closed
¶
- Тип:
<Promise>
Выполняется сundefined
, когда связанный<ReadableStream>
закрывается или отклоняется, если поток ошибается или блокировка читателя освобождается до завершения закрытия потока.
readableStreamDefaultReader.read()
¶
- Возвращает: Обещание, выполненное с объектом:
value
<ArrayBuffer>
done
<boolean>
Запрашивает следующий фрагмент данных из базового <ReadableStream>
и возвращает обещание, которое будет выполнено с данными, как только они станут доступны.
readableStreamDefaultReader.releaseLock()
¶
Освобождает блокировку этого читателя на базовом <ReadableStream>
.
Класс: ReadableStreamBYOBReader
¶
ReadableStreamBYOBReader
- это альтернативный потребитель для байт-ориентированных <ReadableStream>
(тех, которые созданы с underlyingSource.type
, установленным равным 'bytes'
при создании ReadableStream
).
Аббревиатура BYOB
означает "принеси свой собственный буфер". Это паттерн, позволяющий более эффективно читать байт-ориентированные данные, избегая лишнего копирования.
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 |
|
new ReadableStreamBYOBReader(stream)
¶
stream
<ReadableStream>
Создает новый ReadableStreamBYOBReader
, который заблокирован на заданный <ReadableStream>
.
readableStreamBYOBReader.cancel([reason])
¶
reason
{любая}- Возвращает: Обещание, выполненное с
undefined
.
Отменяет <ReadableStream>
и возвращает обещание, которое выполняется, если базовый поток был отменен.
readableStreamBYOBReader.closed
¶
- Тип:
<Promise>
Выполняется сundefined
, когда связанный<ReadableStream>
закрывается или отклоняется, если поток ошибается или блокировка читателя освобождается до того, как поток завершит закрытие.
readableStreamBYOBReader.read(view)
¶
view
{Buffer|TypedArray|DataView}- Возвращает: Обещание, выполненное с объектом:
value
<ArrayBuffer>
done
<boolean>
Запрашивает следующий фрагмент данных из базового <ReadableStream>
и возвращает обещание, которое будет выполнено с данными, как только они станут доступны.
Не передавайте в этот метод экземпляр объединенного объекта <Buffer>
. Пулированные объекты Buffer
создаются с помощью Buffer.allocUnsafe()
, или Buffer.from()
, или часто возвращаются различными обратными вызовами модуля node:fs
. Эти типы Buffer
используют общий базовый объект <ArrayBuffer>
, который содержит все данные из всех объединенных экземпляров Buffer
. Когда Буфер
, <TypedArray>
или <DataView>
передается в readableStreamBYOBReader.read()
, базовый 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
{любая}
Сигнализирует об ошибке, которая вызывает ошибку и закрытие <ReadableStream>
.
Класс: ReadableByteStreamController
¶
Каждый <ReadableStream>
имеет контроллер, который отвечает за внутреннее состояние и управление очередью потока. Контроллер ReadableByteStreamController
предназначен для байт-ориентированных ReadableStream
.
readableByteStreamController.byobRequest
¶
- Тип: {ReadableStreamBYOBRequest}
readableByteStreamController.close()
¶
Закрывает <ReadableStream>
, с которым связан этот контроллер.
readableByteStreamController.desiredSize
¶
- Тип:
<number>
Возвращает количество данных, оставшихся для заполнения очереди <ReadableStream>
.
readableByteStreamController.enqueue(chunk)
¶
chunk
: {Buffer|TypedArray|DataView}.
Добавляет новый фрагмент данных в очередь <ReadableStream>
.
readableByteStreamController.error([error])
¶
error
{любая}
Сигнализирует об ошибке, которая вызывает ошибку и закрытие <ReadableStream>
.
Класс: ReadableStreamBYOBRequest
¶
При использовании 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
¶
WritableStream
- это место назначения, куда отправляются потоковые данные.
1 2 3 4 5 6 7 8 9 |
|
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
{любая}- Возвращает: Обещание, выполненное с
undefined
.
type
<any>
Опцияtype
зарезервирована для будущего использования и должна быть неопределенной.
strategy
<Object>
highWaterMark
<number>
Максимальный размер внутренней очереди перед применением противодавления.size
<Function>
Определяемая пользователем функция, используемая для определения размера каждого куска данных.
writableStream.abort([reason])
¶
reason
{любая}- Возвращает: Обещание, выполненное с
undefined
.
Резко завершает WritableStream
. Все записи в очереди будут отменены, а связанные с ними обещания отклонены.
writableStream.close()
¶
- Возвращает: Обещание, выполненное с
undefined
.
Закрывает WritableStream
, если не ожидается дополнительных записей.
writableStream.getWriter()
¶
- Возвращает: {WritableStreamDefaultWriter}.
Создает новый экземпляр писателя, который может быть использован для записи данных в WritableStream
.
writableStream.locked
¶
- Тип:
<boolean>
Свойство writableStream.locked
по умолчанию имеет значение false
, и переключается на true
, если к данному WritableStream
прикреплен активный писатель.
Передача с помощью postMessage()¶
Экземпляр {WritableStream} может быть передан с помощью {MessagePort}.
1 2 3 4 5 6 7 8 9 |
|
Класс: WritableStreamDefaultWriter
¶
new WritableStreamDefaultWriter(stream)
¶
поток
{WritableStream}
Создает новый WritableStreamDefaultWriter
, который заблокирован для данного WritableStream
.
writableStreamDefaultWriter.abort([reason])
¶
reason
{любая}- Возвращает: Обещание, выполненное с
undefined
.
Резко завершает WritableStream
. Все записи в очереди будут отменены, а связанные с ними обещания отклонены.
writableStreamDefaultWriter.close()
¶
- Возвращает: Обещание, выполненное с
undefined
.
Закрывает WritableStream
, если не ожидается дополнительных записей.
writableStreamDefaultWriter.closed
¶
- Тип:
<Promise>
Выполняется сundefined
, когда связанный {WritableStream} закрывается или отклоняется, если поток ошибается или блокировка писателя освобождается до завершения закрытия потока.
writableStreamDefaultWriter.desiredSize
¶
- Тип:
<number>
Количество данных, необходимое для заполнения очереди {WritableStream}.
writableStreamDefaultWriter.ready
¶
- тип: Обещание, которое выполняется с
undefined
, когда писатель готов к использованию.
writableStreamDefaultWriter.releaseLock()
¶
Освобождает блокировку этого писателя на базовом <ReadableStream>
.
writableStreamDefaultWriter.write([chunk])
¶
chunk
:<any>
- Возвращает: Обещание, выполненное с
undefined
.
Добавляет новый фрагмент данных в очередь {WritableStream}.
Класс: WritableStreamDefaultController
¶
Контроллер WritableStreamDefaultController
управляет внутренним состоянием {WritableStream}.
writableStreamDefaultController.error([error])
¶
error
{любая}
Вызывается пользовательским кодом для сигнализации о том, что произошла ошибка при обработке данных WritableStream
. После вызова {WritableStream} будет прерван, а текущие записи будут отменены.
writableStreamDefaultController.signal
¶
- Тип:
<AbortSignal>
СигналAbortSignal
, который можно использовать для отмены ожидающих операций записи или закрытия, когда {WritableStream} прерывается.
Класс: TransformStream
¶
Поток TransformStream
состоит из <ReadableStream>
и {WritableStream}, которые соединены таким образом, что данные, записанные в WritableStream
, принимаются и потенциально преобразуются, прежде чем попасть в очередь ReadableStream
.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
new TransformStream([transformer[, writableStrategy[, readableStrategy]]])
¶
transformer
<Object>
start
<Function>
Определяемая пользователем функция, которая вызывается сразу после созданияTransformStream
.controller
{TransformStreamDefaultController}- Возвращает:
undefined
или обещание, выполненное сundefined
.
transform
<Function>
Определяемая пользователем функция, которая получает и потенциально изменяет фрагмент данных, записанный вtransformStream.writable
, перед тем как передать его вtransformStream.readable
.chunk
<any>
контроллер
{TransformStreamDefaultController}- Возвращает: Обещание, выполненное с
undefined
.
flush
<Function>
Определяемая пользователем функция, которая вызывается непосредственно перед закрытием записываемой стороныTransformStream
, сигнализируя об окончании процесса преобразования.controller
{TransformStreamDefaultController}- Возвращает: Обещание, выполненное с
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
¶
Контроллер TransformStreamDefaultController
управляет внутренним состоянием TransformStream
.
transformStreamDefaultController.desiredSize
¶
- Тип:
<number>
Количество данных, необходимое для заполнения очереди читаемой стороны.
transformStreamDefaultController.enqueue([chunk])
¶
chunk
<any>
Добавляет фрагмент данных в очередь читаемой стороны.
transformStreamDefaultController.error([reason])
¶
reason
{любая}
Сигнализирует как читаемой, так и записываемой стороне, что при обработке данных преобразования произошла ошибка, в результате чего обе стороны будут резко закрыты.
transformStreamDefaultController.terminate()
¶
Закрывает доступную для чтения сторону транспорта и вызывает резкое закрытие доступной для записи стороны с ошибкой.
Класс: ByteLengthQueuingStrategy
¶
new ByteLengthQueuingStrategy(options)
¶
byteLengthQueuingStrategy.highWaterMark
¶
- Тип:
<number>
byteLengthQueuingStrategy.size
¶
- Тип:
<Function>
Класс: CountQueuingStrategy
¶
new CountQueuingStrategy(options)
¶
countQueuingStrategy.highWaterMark
¶
- Тип:
<number>
countQueuingStrategy.size
¶
- Тип:
<Function>
Класс: TextEncoderStream
¶
new TextEncoderStream()
¶
Создает новый экземпляр TextEncoderStream
.
textEncoderStream.encoding
¶
- Тип:
<string>
Кодировка, поддерживаемая экземпляром TextEncoderStream
.
textEncoderStream.readable
¶
- Тип:
<ReadableStream>
textEncoderStream.writable
¶
- Тип: {WritableStream}
Класс: TextDecoderStream
¶
new TextDecoderStream([encoding[, options]])
¶
encoding
<string>
Определяеткодировку
, которую поддерживает данный экземпляртекстового декодера
. По умолчанию:'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
¶
new CompressionStream(format)
¶
format
<string>
Один изdeflate
илиgzip
.
compressionStream.readable
¶
- Тип:
<ReadableStream>
compressionStream.writable
¶
- Тип: {WritableStream}
Класс: DecompressionStream
¶
new DecompressionStream(format)
¶
format
<string>
Один изdeflate
илиgzip
.
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 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
streamConsumers.blob(stream)
¶
stream
{ReadableStream|stream.Readable|AsyncIterator}- Возвращает:
<Promise>
Выполняется с помощью<Blob>
, содержащего полное содержимое потока.
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
streamConsumers.buffer(stream)
¶
stream
{ReadableStream|stream.Readable|AsyncIterator}- Возвращает:
<Promise>
Выполняется с<Buffer>
, содержащим полное содержимое потока.
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
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 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
streamConsumers.text(stream)
¶
stream
{ReadableStream|stream.Readable|AsyncIterator}- Возвращает:
<Promise>
Выполняется с содержимым потока, разобранным как строка в кодировке UTF-8.
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 |
|