Readable class
- Extends
-
Stream
Конструкторы
| Readable(Readable |
Свойства
| closed | Это |
| destroyed | Это |
| errored | Возвращает ошибку, если поток был уничтожен с ошибкой. |
| readable | Безопасно ли вызывать |
| readable |
Возвращает, был ли поток уничтожен или допущен ошибка до излучения |
| readable |
Показывает, был |
| readable |
Getter для свойства |
| readable |
Становится |
| readable |
Это свойство отражает текущее состояние |
| readable |
Возвращает значение |
| readable |
Это свойство содержит количество байт (или объектов) в очереди, готовых к чтению. Значение предоставляет данные интроспекции относительно состояния |
| readable |
Getter для свойства |
Методы
| add |
|
| add |
|
| compose(Writable |
Этот метод также позволяет предоставить , См. |
| destroy(Error) | Уничтожить поток. Опционально выпустить После Реализаторы не должны отменять этот метод, а вместо этого реализовывать |
| drop(number, Abortable) | Этот метод возвращает новый поток с первыми предельными блоками, отбрасывающимися с самого начала. |
| emit(string | symbol, any[]) | |
| emit<E>(E, Readable |
|
| every((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<Readable |
Этот метод похож на |
| filter((data: any, options?: Abortable) => boolean | Promise<boolean>, Readable |
Этот метод позволяет фильтровать поток. Для каждого блока в потоке вызывается функция fn , и если она возвращает истинное значение, этот блок передаётся в поток результата.
Если функция fn возвращает обещание — это обещание будет |
| find((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<Readable |
|
| find<T>((data: any, options?: Abortable) => data, Pick<Readable |
Этот метод похож на |
| flat |
Этот метод возвращает новый поток, применяя данный callback к каждому блоку потока и затем выравнивая результат. Возможно вернуть поток или другую итерируемую или асинхронную итерируемую из fn , и итоговые потоки будут объединены (плоски) с возвращённым потоком. |
| for |
Этот метод позволяет итерировать поток. Для каждого блока в потоке будет вызвана функция fn .
Если функция fn возвращает обещание — это обещание будет Этот метод отличается от Этот метод отличается от прослушивания |
| from(Iterable<any> | Async |
Утилитарный метод создания читаемых потоков из итераторов. |
| from |
Утилитарный метод создания |
| is |
Возвращает, независимо от того, был ли поток прочитан или отменён. |
| is |
Метод возвращает
|
| iterator(Readable |
Итератор, созданный этим методом, даёт пользователям возможность отменить разрушение потока, если |
| listener |
|
| listener |
|
| listeners(string | symbol) | |
| listeners<E>(E) | |
| map((data: any, options?: Abortable) => any, Readable |
Этот метод позволяет отображать по потоку.
Функция fn будет вызываться для каждого чанка в потоке.
Если функция fn возвращает обещание — это обещание будет |
| off(string | symbol, (args: any[]) => void) | |
| off<E>(E, (args: Readable |
|
| on(string | symbol, (args: any[]) => void) | |
| on<E>(E, (args: Readable |
|
| once(string | symbol, (args: any[]) => void) | |
| once<E>(E, (args: Readable |
|
| pause() | Этот
Метод |
| prepend |
|
| prepend |
|
| prepend |
|
| prepend |
|
| push(any, Buffer |
|
| raw |
|
| raw |
|
| read(number) |
Необязательный Если аргумент Аргумент Метод должен вызываться только на
Каждый вызов возвращает Поэтому, чтобы прочитать весь содержимое файла из
Поток Если Вызов прочитан после передачи |
| reduce<T>((previous: any, data: any, options?: Abortable) => T) | Этот метод вызывает fn на каждом участке потока в порядке, передавая ему результат вычисления по предыдущему элементу. Она возвращает обещание на итоговое значение редукции. Если начальное значение не предоставляется, в качестве начального значения используется первый кусок потока.
Если поток пуст, обещание отклоняется с помощью Функция редуктора повторяет поток по элементам, что означает, что параметр параллелизма или параллелизма отсутствует. Чтобы выполнить параллельное сокращение, можно извлечь метод асинхронной функции to |
| reduce<T>((previous: T, data: any, options?: Abortable) => T, T, Abortable) | |
| remove |
|
| remove |
|
| remove |
|
| remove |
|
| resume() | Этот Этот
Метод |
| set |
Метод задаёт кодировку символов для данных, читаемых По умолчанию кодировка не назначается, и данные потока возвращаются в виде Поток корректно обрабатывает многобайтовые символы,
|
| some((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<Readable |
Этот метод похож на |
| take(number, Abortable) | Этот метод возвращает новый поток с первыми предельными чанками. |
| to |
Этот метод позволяет легко получать содержимое потока. Поскольку этот метод считывает весь поток в память, он нивелирует преимущества потоков. Он предназначен для совместимости и удобства, а не как основной способ потребления потоков. |
| to |
Утилитарный метод создания паутины |
| unpipe(Writable |
Метод отсоединяет ручей Если не указано Если указано,
|
| unshift(any, Buffer |
Передача Метод
Разработчикам, использующим
В отличие от push, |
| wrap(Readable |
До Node.js 0.10 потоки не реализовывали весь При использовании старой Node.js-библиотеки, которая генерирует Это редко потребуется
|
| [async |
|
| [to |
Когда Это обеспечивает пакетный асинхронный итератор, который сбрасывает внутренний буфер потока на Возвращаемый итератор помечен как проверенный источник, поэтому
Без |
Наследуемые методы
| event |
Возвращает массив, в котором перечислены события, для которых у поставщика зарегистрированы прослушиватели.
|
| get |
Возвращает текущее значение максимального прослушивателя для |
| pipe<T>(T, Pipe |
|
| set |
По умолчанию Возвращает ссылку на |
| [capture |
Метод
|
Сведения о конструкторе
Readable(ReadableOptions<Readable>)
Сведения о свойстве
closed
Это true после 'close' было излучено.
closed: boolean
Значение свойства
boolean
destroyed
Это true было readable.destroy() объявлено.
destroyed: boolean
Значение свойства
boolean
errored
Возвращает ошибку, если поток был уничтожен с ошибкой.
errored: null | Error
Значение свойства
null | Error
readable
readableAborted
Возвращает, был ли поток уничтожен или допущен ошибка до излучения 'end'.
readableAborted: boolean
Значение свойства
boolean
readableDidRead
Показывает, был 'data' ли излучён.
readableDidRead: boolean
Значение свойства
boolean
readableEncoding
Getter для свойства encoding данного Readable потока. Свойство encoding можно задать с помощью метода setEncoding .
readableEncoding: null | BufferEncoding
Значение свойства
null | BufferEncoding
readableEnded
readableFlowing
Это свойство отражает текущее состояние Readable ручья, описанное в разделе «Три состояния ».
readableFlowing: null | boolean
Значение свойства
null | boolean
readableHighWaterMark
Возвращает значение highWaterMark переданных при создании этого Readable.
readableHighWaterMark: number
Значение свойства
number
readableLength
Это свойство содержит количество байт (или объектов) в очереди, готовых к чтению. Значение предоставляет данные интроспекции относительно состояния highWaterMark.
readableLength: number
Значение свойства
number
readableObjectMode
Getter для свойства objectMode данного Readable потока.
readableObjectMode: boolean
Значение свойства
boolean
Сведения о методе
addListener(string | symbol, (args: any[]) => void)
function addListener(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
addListener<E>(E, (args: ReadableEventMap[E]) => void)
function addListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
compose(WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, Abortable)
import { Readable } from 'node:stream';
async function* splitToWords(source) {
for await (const chunk of source) {
const words = String(chunk).split(' ');
for (const word of words) {
yield word;
}
}
}
const wordsStream = Readable.from(['text passed through', 'composed stream']).compose(splitToWords);
const words = await wordsStream.toArray();
console.log(words); // prints ['text', 'passed', 'through', 'composed', 'stream']
readable.compose(s) эквивалентен stream.compose(readable, s).
Этот метод также позволяет предоставить , AbortSignal который уничтожает составленный поток при прекращении.
См. stream.compose(...streams) для получения дополнительной информации.
function compose(stream: WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, options?: Abortable): Duplex
Параметры
- stream
-
WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void
- options
-
Abortable
Возвращаемое значение
Duplex
ручей, составленный из потока stream.
destroy(Error)
Уничтожить поток. Опционально выпустить 'error' событие и выпустить 'close' событие (если emitClose только не установлено на false). После этого вызова читаемый поток освобождает любые внутренние ресурсы, и последующие вызовы push() будут игнорироваться.
После destroy() вызова любые дальнейшие вызовы будут no-op, и никаких ошибок, кроме , _destroy() не может быть издана как 'error'.
Реализаторы не должны отменять этот метод, а вместо этого реализовывать readable._destroy().
function destroy(error?: Error): Readable
Параметры
- error
-
Error
Ошибка, которая будет передана в виде полезной нагрузки в 'error' случае события
Возвращаемое значение
drop(number, Abortable)
Этот метод возвращает новый поток с первыми предельными блоками, отбрасывающимися с самого начала.
function drop(limit: number, options?: Abortable): Readable
Параметры
- limit
-
number
Количество чанков, которые можно выпасть из читаемого.
- options
-
Abortable
Возвращаемое значение
поток с лимитными чанками, выпавшими с самого начала.
emit(string | symbol, any[])
function emit(eventName: string | symbol, args: any[]): boolean
Параметры
- eventName
-
string | symbol
- args
-
any[]
Возвращаемое значение
boolean
emit<E>(E, ReadableEventMap[E])
function emit<E>(eventName: E, args: ReadableEventMap[E]): boolean
Параметры
- eventName
-
E
- args
-
ReadableEventMap[E]
Возвращаемое значение
boolean
every((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
Этот метод похож на Array.prototype.every и вызывает fn на каждом чанке потока, чтобы проверить, являются ли все ожидаемые значения возврата истинными для fn. Как только fn-вызов на awaitchunk ed return-значение ложно, поток уничтожается, и обещание выполняется с false.
Если все fn-запросы на чанки возвращают истинное значение, обещание выполняется с true.
function every(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<boolean>
Параметры
- fn
-
(data: any, options?: Abortable) => boolean | Promise<boolean>
функция для вызова каждого блока потока. Асинхронно или нет.
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
Promise<boolean>
Обещание, вычисляющее для true Если FN возвращает истинное значение для каждого из чанков.
filter((data: any, options?: Abortable) => boolean | Promise<boolean>, ReadableOperatorOptions)
Этот метод позволяет фильтровать поток. Для каждого блока в потоке вызывается функция fn , и если она возвращает истинное значение, этот блок передаётся в поток результата.
Если функция fn возвращает обещание — это обещание будет awaited.
function filter(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: ReadableOperatorOptions): Readable
Параметры
- fn
-
(data: any, options?: Abortable) => boolean | Promise<boolean>
функция фильтрации чанков из потока. Асинхронно или нет.
- options
-
ReadableOperatorOptions
Возвращаемое значение
поток, отфильтрованный предикатом fn.
find((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
function find(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<any>
Параметры
- fn
-
(data: any, options?: Abortable) => boolean | Promise<boolean>
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
Promise<any>
find<T>((data: any, options?: Abortable) => data, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
Этот метод похож на Array.prototype.find и вызывает fn на каждом чанке потока, чтобы найти блок с истинным значением fn. Как только ожидаемое возвратное значение fn-звонка становится истинным, поток уничтожается, и обещание исполняется со значением, для которого fn возвращает истинное значение.
Если все fn-запросы на блоках возвращают ложное значение, обещание выполняется с .undefined
function find<T>(fn: (data: any, options?: Abortable) => data, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<undefined | T>
Параметры
- fn
-
(data: any, options?: Abortable) => data
функция для вызова каждого блока потока. Асинхронно или нет.
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
Promise<undefined | T>
Обещание, вычисляющее для первого блока, для которого fn оценивается с истинным значением, или undefined если элемент не найден.
flatMap((data: any, options?: Abortable) => any, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
Этот метод возвращает новый поток, применяя данный callback к каждому блоку потока и затем выравнивая результат.
Возможно вернуть поток или другую итерируемую или асинхронную итерируемую из fn , и итоговые потоки будут объединены (плоски) с возвращённым потоком.
function flatMap(fn: (data: any, options?: Abortable) => any, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Readable
Параметры
- fn
-
(data: any, options?: Abortable) => any
функция для отображения по каждому чанку в потоке. Возможно, это асинхронно. Может быть, это поток или генератор.
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
поток с плоским отображением с функцией fn.
forEach((data: any, options?: Abortable) => void | Promise<void>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
Этот метод позволяет итерировать поток. Для каждого блока в потоке будет вызвана функция fn .
Если функция fn возвращает обещание — это обещание будет awaited.
Этот метод отличается от for await...of циклов тем, что может по желанию одновременно обрабатывать чанки.
Кроме того, forEach итерацию можно остановить только после прохождения опции signal и прерывания соответствующего AbortController, пока for await...of можно остановить с break помощью или return.
В любом случае поток будет уничтожен.
Этот метод отличается от прослушивания 'data' события тем, что использует событие readable в базовой машине и может ограничить количество одновременных вызовов fn .
function forEach(fn: (data: any, options?: Abortable) => void | Promise<void>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<void>
Параметры
- fn
-
(data: any, options?: Abortable) => void | Promise<void>
функция для вызова каждого блока потока. Асинхронно или нет.
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
Promise<void>
обещание на то, что стрим закончится.
from(Iterable<any> | AsyncIterable<any>, ReadableOptions<Readable>)
Утилитарный метод создания читаемых потоков из итераторов.
static function from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions<Readable>): Readable
Параметры
- iterable
-
Iterable<any> | AsyncIterable<any>
Объект, реализующий Symbol.asyncIterator или Symbol.iterator итерабельный протокол. При передаче нулевого значения возникает событие «ошибка».
- options
-
ReadableOptions<Readable>
Предоставлены опции.new stream.Readable([options]) По умолчанию Readable.from() будет установлено options.objectMode на true, если только это явно не исключено, установив options.objectMode на false.
Возвращаемое значение
fromWeb(ReadableStream<any>, Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">)
Утилитарный метод создания Readable из веба ReadableStream.
static function fromWeb(readableStream: ReadableStream<any>, options?: Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">): Readable
Параметры
- readableStream
-
ReadableStream<any>
- options
-
Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">
Возвращаемое значение
isDisturbed(ReadableStream<any> | ReadableStream)
Возвращает, независимо от того, был ли поток прочитан или отменён.
static function isDisturbed(stream: ReadableStream<any> | ReadableStream): boolean
Параметры
- stream
-
ReadableStream<any> | ReadableStream
Возвращаемое значение
boolean
isPaused()
Метод возвращает readable.isPaused() текущее рабочее состояние Readable.
Это используется в первую очередь механизмом, лежащим в основе метода readable.pipe() .
В большинстве случаев нет смысла использовать этот метод напрямую.
const readable = new stream.Readable();
readable.isPaused(); // === false
readable.pause();
readable.isPaused(); // === true
readable.resume();
readable.isPaused(); // === false
function isPaused(): boolean
Возвращаемое значение
boolean
iterator(ReadableIteratorOptions)
Итератор, созданный этим методом, даёт пользователям возможность отменить разрушение потока, если for await...of цикл выходит на return, break, или throw, или если итератор должен уничтожить поток, если поток издал ошибку во время итерации.
function iterator(options?: ReadableIteratorOptions): AsyncIterator<any, undefined, any>
Параметры
- options
-
ReadableIteratorOptions
Возвращаемое значение
AsyncIterator<any, undefined, any>
listenerCount(string | symbol, (args: any[]) => void)
function listenerCount(eventName: string | symbol, listener?: (args: any[]) => void): number
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
number
listenerCount<E>(E, (args: ReadableEventMap[E]) => void)
function listenerCount<E>(eventName: E, listener?: (args: ReadableEventMap[E]) => void): number
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
number
listeners(string | symbol)
function listeners(eventName: string | symbol): (args: any[]) => void[]
Параметры
- eventName
-
string | symbol
Возвращаемое значение
(args: any[]) => void[]
listeners<E>(E)
function listeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]
Параметры
- eventName
-
E
Возвращаемое значение
(args: ReadableEventMap[E]) => void[]
map((data: any, options?: Abortable) => any, ReadableOperatorOptions)
Этот метод позволяет отображать по потоку.
Функция fn будет вызываться для каждого чанка в потоке.
Если функция fn возвращает обещание — это обещание будет awaited до передачи в поток результатов.
function map(fn: (data: any, options?: Abortable) => any, options?: ReadableOperatorOptions): Readable
Параметры
- fn
-
(data: any, options?: Abortable) => any
функция для отображения по каждому чанку в потоке. Асинхронно или нет.
- options
-
ReadableOperatorOptions
Возвращаемое значение
поток, отображаемый с функцией fn.
off(string | symbol, (args: any[]) => void)
function off(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
off<E>(E, (args: ReadableEventMap[E]) => void)
function off<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
on(string | symbol, (args: any[]) => void)
function on(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
on<E>(E, (args: ReadableEventMap[E]) => void)
function on<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
once(string | symbol, (args: any[]) => void)
function once(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
once<E>(E, (args: ReadableEventMap[E]) => void)
function once<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
pause()
Этот readable.pause() метод заставляет поток в режиме потока прекратить 'data' выпускать события, переключаясь из режима потока. Любые доступные данные останутся во внутреннем буфере.
const readable = getReadableStreamSomehow();
readable.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
readable.pause();
console.log('There will be no additional data for 1 second.');
setTimeout(() => {
console.log('Now data will start flowing again.');
readable.resume();
}, 1000);
});
Метод readable.pause() не действует, если есть 'readable' слушатель события.
function pause(): Readable
Возвращаемое значение
prependListener(string | symbol, (args: any[]) => void)
function prependListener(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
prependListener<E>(E, (args: ReadableEventMap[E]) => void)
function prependListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
prependOnceListener(string | symbol, (args: any[]) => void)
function prependOnceListener(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
prependOnceListener<E>(E, (args: ReadableEventMap[E]) => void)
function prependOnceListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
push(any, BufferEncoding)
function push(chunk: any, encoding?: BufferEncoding): boolean
Параметры
- chunk
-
any
- encoding
-
BufferEncoding
Возвращаемое значение
boolean
rawListeners(string | symbol)
function rawListeners(eventName: string | symbol): (args: any[]) => void[]
Параметры
- eventName
-
string | symbol
Возвращаемое значение
(args: any[]) => void[]
rawListeners<E>(E)
function rawListeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]
Параметры
- eventName
-
E
Возвращаемое значение
(args: ReadableEventMap[E]) => void[]
read(number)
readable.read() Метод считывает данные из внутреннего буфера и возвращает их. Если данные для чтения отсутствуют, null возвращается. По умолчанию данные возвращаются как Buffer объект, если только кодировка не была задана с помощью readable.setEncoding() метода или поток не работает в объектном режиме.
Необязательный size аргумент указывает определённое количество байт для чтения. Если size байты недоступны для чтения, null они возвращаются, если поток не завершился, тогда все данные, оставшиеся во внутреннем буфере, будут возвращены.
Если аргумент size не указан, все данные, содержащиеся во внутреннем буфере, будут возвращены.
Аргумент size должен быть меньше или равен 1 ГиБ.
Метод должен вызываться только на readable.read() потоках, Readable работающих в паузированном режиме. В режиме потока readable.read() вызывается автоматически, пока внутренний буфер не будет полностью осушен.
const readable = getReadableStreamSomehow();
// 'readable' may be triggered multiple times as data is buffered in
readable.on('readable', () => {
let chunk;
console.log('Stream is readable (new data received in buffer)');
// Use a loop to make sure we read all currently available data
while (null !== (chunk = readable.read())) {
console.log(`Read ${chunk.length} bytes of data...`);
}
});
// 'end' will be triggered once when there is no more data available
readable.on('end', () => {
console.log('Reached end of stream.');
});
Каждый вызов возвращает readable.read() фрагмент данных, или null. Куски не соединяются. Цикл необходим для поглощения всех данных, while находящихся в буфере. При чтении большого файла .read() может вернуться null, уже поглотив весь буферизованный контент, но ещё больше данных, которые ещё не буферизированы. В этом случае новое 'readable' событие возникает, когда в буфере появляется больше данных. В конце 'end' событий событие будет опубликовано, когда не останется новых данных.
Поэтому, чтобы прочитать весь содержимое файла из readable, необходимо собрать чанки между несколькими 'readable' событиями:
const chunks = [];
readable.on('readable', () => {
let chunk;
while (null !== (chunk = readable.read())) {
chunks.push(chunk);
}
});
readable.on('end', () => {
const content = chunks.join('');
});
Поток Readable в объектном режиме всегда возвращает один элемент из вызова в readable.read(size), независимо от значения size аргумента.
Если readable.read() метод возвращает объём данных, 'data' событие также будет излучаться.
Вызов прочитан после передачи 'end' события вернётся null. Ошибка во время выполнения не возникает.
function read(size?: number): any
Параметры
- size
-
number
Необязательный аргумент для указания, сколько данных читать.
Возвращаемое значение
any
reduce<T>((previous: any, data: any, options?: Abortable) => T)
Этот метод вызывает fn на каждом участке потока в порядке, передавая ему результат вычисления по предыдущему элементу. Она возвращает обещание на итоговое значение редукции.
Если начальное значение не предоставляется, в качестве начального значения используется первый кусок потока.
Если поток пуст, обещание отклоняется с помощью TypeError свойства кодаERR_INVALID_ARGS.
Функция редуктора повторяет поток по элементам, что означает, что параметр параллелизма или параллелизма отсутствует. Чтобы выполнить параллельное сокращение, можно извлечь метод асинхронной функции to readable.map .
function reduce<T>(fn: (previous: any, data: any, options?: Abortable) => T): Promise<T>
Параметры
- fn
-
(previous: any, data: any, options?: Abortable) => T
функция редуктора, вызывающая каждый чанк в потоке. Асинхронно или нет.
Возвращаемое значение
Promise<T>
обещание конечного значения редукции.
reduce<T>((previous: T, data: any, options?: Abortable) => T, T, Abortable)
function reduce<T>(fn: (previous: T, data: any, options?: Abortable) => T, initial: T, options?: Abortable): Promise<T>
Параметры
- fn
-
(previous: T, data: any, options?: Abortable) => T
- initial
-
T
- options
-
Abortable
Возвращаемое значение
Promise<T>
removeAllListeners(string | symbol)
function removeAllListeners(eventName?: string | symbol): Readable
Параметры
- eventName
-
string | symbol
Возвращаемое значение
removeAllListeners<E>(E)
function removeAllListeners<E>(eventName?: E): Readable
Параметры
- eventName
-
E
Возвращаемое значение
removeListener(string | symbol, (args: any[]) => void)
function removeListener(eventName: string | symbol, listener: (args: any[]) => void): Readable
Параметры
- eventName
-
string | symbol
- listener
-
(args: any[]) => void
Возвращаемое значение
removeListener<E>(E, (args: ReadableEventMap[E]) => void)
function removeListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable
Параметры
- eventName
-
E
- listener
-
(args: ReadableEventMap[E]) => void
Возвращаемое значение
resume()
Этот readable.resume() метод заставляет явно приостановленный Readable поток возобновить события излучения 'data' , переключая поток в режим потока.
Этот readable.resume() метод можно использовать для полного потребления данных из потока без фактической обработки этих данных:
getReadableStreamSomehow()
.resume()
.on('end', () => {
console.log('Reached the end, but did not read anything.');
});
Метод readable.resume() не действует, если есть 'readable' слушатель события.
function resume(): Readable
Возвращаемое значение
setEncoding(BufferEncoding)
Метод задаёт кодировку символов для данных, читаемых readable.setEncoding() из потока Readable .
По умолчанию кодировка не назначается, и данные потока возвращаются в виде Buffer объектов. Установка кодировки приводит к тому, что данные потока возвращаются в виде строк указанного кодирования, а не как Buffer объекты. Например, вызов readable.setEncoding('utf8') приводит к интерпретации выходных данных как UTF-8 и передачи в виде строк. Вызов readable.setEncoding('hex') приводит к тому, что данные будут закодированы в шестнадцатеричном строчном формате.
Поток корректно обрабатывает многобайтовые символы, Readable передаваемые через поток, которые в противном случае были бы некорректно декодированы, если просто извлечь из потока как Buffer объекты.
const readable = getReadableStreamSomehow();
readable.setEncoding('utf8');
readable.on('data', (chunk) => {
assert.equal(typeof chunk, 'string');
console.log('Got %d characters of string data:', chunk.length);
});
function setEncoding(encoding: BufferEncoding): Readable
Параметры
- encoding
-
BufferEncoding
Используемая кодировка.
Возвращаемое значение
some((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
Этот метод похож на Array.prototype.some и вызывает fn на каждом чанке потока до тех пор, пока ожидаемое возвращаемое значение не достигнет (или любого истинного значения).true Как только fn-вызов на chunk awaited возвращает значение true, поток уничтожается, и обещание исполняется с true.
Если ни один из fn-призывов к чанкам не возвращает истинное значение, обещание выполняется с false.
function some(fn: (data: any, options?: Abortable) => boolean | Promise<boolean>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<boolean>
Параметры
- fn
-
(data: any, options?: Abortable) => boolean | Promise<boolean>
функция для вызова каждого блока потока. Асинхронно или нет.
- options
-
Pick<ReadableOperatorOptions, "signal" | "concurrency">
Возвращаемое значение
Promise<boolean>
Обещание, оценивающее true , если FN возвращает истинное значение хотя бы для одного из чанков.
take(number, Abortable)
Этот метод возвращает новый поток с первыми предельными чанками.
function take(limit: number, options?: Abortable): Readable
Параметры
- limit
-
number
количество фрагментов, которые нужно взять из читаемого материала.
- options
-
Abortable
Возвращаемое значение
Поток с ограниченными чанками.
toArray(Abortable)
Этот метод позволяет легко получать содержимое потока.
Поскольку этот метод считывает весь поток в память, он нивелирует преимущества потоков. Он предназначен для совместимости и удобства, а не как основной способ потребления потоков.
function toArray(options?: Abortable): Promise<any[]>
Параметры
- options
-
Abortable
Возвращаемое значение
Promise<any[]>
обещание, содержащее массив с содержимым потока.
toWeb(ReadableStream, ReadableToWebOptions)
Утилитарный метод создания паутины ReadableStream из Readable.
static function toWeb(streamReadable: ReadableStream, options?: ReadableToWebOptions): ReadableStream<any>
Параметры
- streamReadable
-
ReadableStream
- options
-
ReadableToWebOptions
Возвращаемое значение
ReadableStream<any>
unpipe(WritableStream)
Метод отсоединяет ручейreadable.unpipe(), Writable ранее присоединённый с помощью метода трубы.
Если не указано destination , то все трубы отсоединяются.
Если указано, destination но труба для неё не установлена, то метод ничего не делает.
import fs from 'node:fs';
const readable = getReadableStreamSomehow();
const writable = fs.createWriteStream('file.txt');
// All the data from readable goes into 'file.txt',
// but only for the first second.
readable.pipe(writable);
setTimeout(() => {
console.log('Stop writing to file.txt.');
readable.unpipe(writable);
console.log('Manually close the file stream.');
writable.end();
}, 1000);
function unpipe(destination?: WritableStream): Readable
Параметры
- destination
-
WritableStream
Опциональный специфический поток для отключения
Возвращаемое значение
unshift(any, BufferEncoding)
Передача chunk в null виде сигнализирует конец потока (EOF) и ведёт себя так же, как readable.push(null), после чего больше данные не могут быть записаны. Сигнал EOF размещается в конце буфера, и любые буферированные данные всё равно будут промыты.
Метод readable.unshift() возвращает часть данных обратно во внутренний буфер. Это полезно в определённых ситуациях, когда поток поглощается кодом, который должен «перепотребить» часть данных, оптимистично извлеченных из источника, чтобы данные могли быть переданы другой стороне.
stream.unshift(chunk) Метод нельзя вызвать после выпуска 'end' события, иначе будет сброшена ошибка во время выполнения.
Разработчикам, использующим stream.unshift() частую пользу, стоит рассмотреть возможность перехода на Transform поток. См. API for stream implementers раздел для получения дополнительной информации.
// Pull off a header delimited by \n\n.
// Use unshift() if we get too much.
// Call the callback with (error, header, stream).
import { StringDecoder } from 'node:string_decoder';
function parseHeader(stream, callback) {
stream.on('error', callback);
stream.on('readable', onReadable);
const decoder = new StringDecoder('utf8');
let header = '';
function onReadable() {
let chunk;
while (null !== (chunk = stream.read())) {
const str = decoder.write(chunk);
if (str.includes('\n\n')) {
// Found the header boundary.
const split = str.split(/\n\n/);
header += split.shift();
const remaining = split.join('\n\n');
const buf = Buffer.from(remaining, 'utf8');
stream.removeListener('error', callback);
// Remove the 'readable' listener before unshifting.
stream.removeListener('readable', onReadable);
if (buf.length)
stream.unshift(buf);
// Now the body of the message can be read from the stream.
callback(null, header, stream);
return;
}
// Still reading the header.
header += str;
}
}
}
В отличие от push, stream.unshift(chunk) процесс чтения не завершается сбросом внутреннего состояния потока.
Это может привести к неожиданным результатам, если readable.unshift() вызов вызывается во время чтения (то есть внутри реализации _read на пользовательском потоке). Следуя за вызовом To readable.unshift() с помощью немедленного натиска , состояние считывания сбросит правильно, однако лучше просто избегать вызова readable.unshift() во время выполнения чтения.
function unshift(chunk: any, encoding?: BufferEncoding)
Параметры
- chunk
-
any
Кусок данных, который нужно отложить в очередь чтения. Для потоков, не работающих в объектном режиме, chunk должны быть {string}, {Buffer}, {TypedArray}, {DataView} или null. Для потоков в объектном режиме может chunk быть любое значение JavaScript.
- encoding
-
BufferEncoding
Кодирование строковых чанков. Должна быть действительная Buffer кодировка, например 'utf8' или 'ascii'.
wrap(ReadableStream)
До Node.js 0.10 потоки не реализовывали весь node:stream API модуля в нынешнем виде. (См. Compatibility больше информации.)
При использовании старой Node.js-библиотеки, которая генерирует 'data' события и имеет метод паузы , который является только рекомендацией, этот readable.wrap() метод может быть использован для создания Readable потока, использующего старый поток в качестве источника данных.
Это редко потребуется readable.wrap() использовать, но этот метод был предоставлен для удобства взаимодействия со старыми Node.js приложениями и библиотеками.
import { OldReader } from './old-api-module.js';
import { Readable } from 'node:stream';
const oreader = new OldReader();
const myReader = new Readable().wrap(oreader);
myReader.on('readable', () => {
myReader.read(); // etc.
});
function wrap(stream: ReadableStream): Readable
Параметры
- stream
-
ReadableStream
«Старинный» читаемый поток
Возвращаемое значение
[asyncIterator]()
function [asyncIterator](): AsyncIterator<any, undefined, any>
Возвращаемое значение
AsyncIterator<any, undefined, any>
AsyncIterator чтобы полностью поглотить поток.
[toAsyncStreamable]()
Когда --experimental-stream-iter флаг включен, Readable потоки реализуют протокол Stream.toAsyncStreamable , обеспечивая эффективное использование API stream/iter .
Это обеспечивает пакетный асинхронный итератор, который сбрасывает внутренний буфер потока на Uint8Array[] партии, амортизируя накладные расходы Promise на каждый чанк стандартного Symbol.asyncIterator пути. Для потоков в байтовом режиме блоки приводятся напрямую в виде Buffer экземпляров (которые являются Uint8Array подклассами).
Для потоков в объектном режиме или кодирования каждый блок нормализуется до Uint8Array пакетирования.
Возвращаемый итератор помечен как проверенный источник, поэтому from() пропускает его без дополнительной нормализации.
import { Readable } from 'node:stream';
import { text, from } from 'node:stream/iter';
const readable = new Readable({
read() { this.push('hello'); this.push(null); },
});
// Readable is automatically consumed via toAsyncStreamable
console.log(await text(from(readable))); // 'hello'
Без --experimental-stream-iter флага вызов этого метода приводит ERR_STREAM_ITER_MISSING_FLAGк .
function [toAsyncStreamable](): ByteReadableStream
Возвращаемое значение
ByteReadableStream
Сведения о наследуемом методе
eventNames()
Возвращает массив, в котором перечислены события, для которых у поставщика зарегистрированы прослушиватели.
import { EventEmitter } from 'node:events';
const myEE = new EventEmitter();
myEE.on('foo', () => {});
myEE.on('bar', () => {});
const sym = Symbol('symbol');
myEE.on(sym, () => {});
console.log(myEE.eventNames());
// Prints: [ 'foo', 'bar', Symbol(symbol) ]
function eventNames(): (string | symbol)[]
Возвращаемое значение
(string | symbol)[]
Унаследованный от Stream.eventNames
getMaxListeners()
Возвращает текущее значение максимального прослушивателя для EventEmitter, заданное emitter.setMaxListeners(n) или значением по умолчанию events.defaultMaxListeners.
function getMaxListeners(): number
Возвращаемое значение
number
Унаследованный от Стрим.getMaxСлушатели
pipe<T>(T, PipeOptions)
function pipe<T>(destination: T, options?: PipeOptions): T
Параметры
- destination
-
T
- options
-
PipeOptions
Возвращаемое значение
T
Унаследованный от Stream.pipe
setMaxListeners(number)
По умолчанию EventEmitterбудет выводить предупреждение, если для определенного события добавляются более 10 прослушивателей. Это полезное значение по умолчанию, которое помогает находить утечки памяти. Метод emitter.setMaxListeners() позволяет изменить ограничение для этого конкретного экземпляра EventEmitter. Для указания неограниченного количества прослушивателей можно задать значение Infinity (или 0).
Возвращает ссылку на EventEmitter, чтобы вызовы могли быть связаны.
function setMaxListeners(n: number): Readable
Параметры
- n
-
number
Возвращаемое значение
Унаследованный от Stream.setMaxListeners
[captureRejectionSymbol](Error, string | symbol, any[])
Метод Symbol.for('nodejs.rejection') вызывается в случае, если при выпуске события происходит отказ обещания и captureRejections активируется на эмиттере.
Возможно использовать events.captureRejectionSymbol вместо Symbol.for('nodejs.rejection').
import { EventEmitter, captureRejectionSymbol } from 'node:events';
class MyClass extends EventEmitter {
constructor() {
super({ captureRejections: true });
}
[captureRejectionSymbol](err, event, ...args) {
console.log('rejection happened for', event, 'with', err, ...args);
this.destroy(err);
}
destroy(err) {
// Tear the resource down here.
}
}
function [captureRejectionSymbol](error: Error, event: string | symbol, args: any[])
Параметры
- error
-
Error
- event
-
string | symbol
- args
-
any[]
Унаследованный от Stream.__@captureRejectionSymbol@180