Readable class

Extends

Stream

Конструкторы

Readable(ReadableOptions<Readable>)

Свойства

closed

Это true после 'close' было излучено.

destroyed

Это true было readable.destroy() объявлено.

errored

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

readable

Безопасно ли вызывать true, то есть поток не был уничтожен и не излучался'error', или 'end'.

readableAborted

Возвращает, был ли поток уничтожен или допущен ошибка до излучения 'end'.

readableDidRead

Показывает, был 'data' ли излучён.

readableEncoding

Getter для свойства encoding данного Readable потока. Свойство encoding можно задать с помощью метода setEncoding .

readableEnded

Становится true при 'end' испускании события.

readableFlowing

Это свойство отражает текущее состояние Readable ручья, описанное в разделе «Три состояния ».

readableHighWaterMark

Возвращает значение highWaterMark переданных при создании этого Readable.

readableLength

Это свойство содержит количество байт (или объектов) в очереди, готовых к чтению. Значение предоставляет данные интроспекции относительно состояния highWaterMark.

readableObjectMode

Getter для свойства objectMode данного Readable потока.

Методы

addListener(string | symbol, (args: any[]) => void)
addListener<E>(E, (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) для получения дополнительной информации.

destroy(Error)

Уничтожить поток. Опционально выпустить 'error' событие и выпустить 'close' событие (если emitClose только не установлено на false). После этого вызова читаемый поток освобождает любые внутренние ресурсы, и последующие вызовы push() будут игнорироваться.

После destroy() вызова любые дальнейшие вызовы будут no-op, и никаких ошибок, кроме , _destroy() не может быть издана как 'error'.

Реализаторы не должны отменять этот метод, а вместо этого реализовывать readable._destroy().

drop(number, Abortable)

Этот метод возвращает новый поток с первыми предельными блоками, отбрасывающимися с самого начала.

emit(string | symbol, any[])
emit<E>(E, ReadableEventMap[E])
every((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

Этот метод похож на Array.prototype.every и вызывает fn на каждом чанке потока, чтобы проверить, являются ли все ожидаемые значения возврата истинными для fn. Как только fn-вызов на awaitchunk ed return-значение ложно, поток уничтожается, и обещание выполняется с false. Если все fn-запросы на чанки возвращают истинное значение, обещание выполняется с true.

filter((data: any, options?: Abortable) => boolean | Promise<boolean>, ReadableOperatorOptions)

Этот метод позволяет фильтровать поток. Для каждого блока в потоке вызывается функция fn , и если она возвращает истинное значение, этот блок передаётся в поток результата. Если функция fn возвращает обещание — это обещание будет awaited.

find((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)
find<T>((data: any, options?: Abortable) => data, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

Этот метод похож на Array.prototype.find и вызывает fn на каждом чанке потока, чтобы найти блок с истинным значением fn. Как только ожидаемое возвратное значение fn-звонка становится истинным, поток уничтожается, и обещание исполняется со значением, для которого fn возвращает истинное значение. Если все fn-запросы на блоках возвращают ложное значение, обещание выполняется с .undefined

flatMap((data: any, options?: Abortable) => any, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

Этот метод возвращает новый поток, применяя данный callback к каждому блоку потока и затем выравнивая результат.

Возможно вернуть поток или другую итерируемую или асинхронную итерируемую из 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 .

from(Iterable<any> | AsyncIterable<any>, ReadableOptions<Readable>)

Утилитарный метод создания читаемых потоков из итераторов.

fromWeb(ReadableStream<any>, Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">)

Утилитарный метод создания Readable из веба ReadableStream.

isDisturbed(ReadableStream<any> | ReadableStream)

Возвращает, независимо от того, был ли поток прочитан или отменён.

isPaused()

Метод возвращает readable.isPaused() текущее рабочее состояние Readable. Это используется в первую очередь механизмом, лежащим в основе метода readable.pipe() . В большинстве случаев нет смысла использовать этот метод напрямую.

const readable = new stream.Readable();

readable.isPaused(); // === false
readable.pause();
readable.isPaused(); // === true
readable.resume();
readable.isPaused(); // === false
iterator(ReadableIteratorOptions)

Итератор, созданный этим методом, даёт пользователям возможность отменить разрушение потока, если for await...of цикл выходит на return, break, или throw, или если итератор должен уничтожить поток, если поток издал ошибку во время итерации.

listenerCount(string | symbol, (args: any[]) => void)
listenerCount<E>(E, (args: ReadableEventMap[E]) => void)
listeners(string | symbol)
listeners<E>(E)
map((data: any, options?: Abortable) => any, ReadableOperatorOptions)

Этот метод позволяет отображать по потоку. Функция fn будет вызываться для каждого чанка в потоке. Если функция fn возвращает обещание — это обещание будет awaited до передачи в поток результатов.

off(string | symbol, (args: any[]) => void)
off<E>(E, (args: ReadableEventMap[E]) => void)
on(string | symbol, (args: any[]) => void)
on<E>(E, (args: ReadableEventMap[E]) => void)
once(string | symbol, (args: any[]) => void)
once<E>(E, (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' слушатель события.

prependListener(string | symbol, (args: any[]) => void)
prependListener<E>(E, (args: ReadableEventMap[E]) => void)
prependOnceListener(string | symbol, (args: any[]) => void)
prependOnceListener<E>(E, (args: ReadableEventMap[E]) => void)
push(any, BufferEncoding)
rawListeners(string | symbol)
rawListeners<E>(E)
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. Ошибка во время выполнения не возникает.

reduce<T>((previous: any, data: any, options?: Abortable) => T)

Этот метод вызывает fn на каждом участке потока в порядке, передавая ему результат вычисления по предыдущему элементу. Она возвращает обещание на итоговое значение редукции.

Если начальное значение не предоставляется, в качестве начального значения используется первый кусок потока. Если поток пуст, обещание отклоняется с помощью TypeError свойства кодаERR_INVALID_ARGS.

Функция редуктора повторяет поток по элементам, что означает, что параметр параллелизма или параллелизма отсутствует. Чтобы выполнить параллельное сокращение, можно извлечь метод асинхронной функции to readable.map .

reduce<T>((previous: T, data: any, options?: Abortable) => T, T, Abortable)
removeAllListeners(string | symbol)
removeAllListeners<E>(E)
removeListener(string | symbol, (args: any[]) => void)
removeListener<E>(E, (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' слушатель события.

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);
});
some((data: any, options?: Abortable) => boolean | Promise<boolean>, Pick<ReadableOperatorOptions, "signal" | "concurrency">)

Этот метод похож на Array.prototype.some и вызывает fn на каждом чанке потока до тех пор, пока ожидаемое возвращаемое значение не достигнет (или любого истинного значения).true Как только fn-вызов на chunk awaited возвращает значение true, поток уничтожается, и обещание исполняется с true. Если ни один из fn-призывов к чанкам не возвращает истинное значение, обещание выполняется с false.

take(number, Abortable)

Этот метод возвращает новый поток с первыми предельными чанками.

toArray(Abortable)

Этот метод позволяет легко получать содержимое потока.

Поскольку этот метод считывает весь поток в память, он нивелирует преимущества потоков. Он предназначен для совместимости и удобства, а не как основной способ потребления потоков.

toWeb(ReadableStream, ReadableToWebOptions)

Утилитарный метод создания паутины ReadableStream из Readable.

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);
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() во время выполнения чтения.

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.
});
[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к .

Наследуемые методы

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) ]
getMaxListeners()

Возвращает текущее значение максимального прослушивателя для EventEmitter, заданное emitter.setMaxListeners(n) или значением по умолчанию events.defaultMaxListeners.

pipe<T>(T, PipeOptions)
setMaxListeners(number)

По умолчанию EventEmitterбудет выводить предупреждение, если для определенного события добавляются более 10 прослушивателей. Это полезное значение по умолчанию, которое помогает находить утечки памяти. Метод emitter.setMaxListeners() позволяет изменить ограничение для этого конкретного экземпляра EventEmitter. Для указания неограниченного количества прослушивателей можно задать значение Infinity (или 0).

Возвращает ссылку на EventEmitter, чтобы вызовы могли быть связаны.

[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.
  }
}

Сведения о конструкторе

Readable(ReadableOptions<Readable>)

new Readable(options?: ReadableOptions<Readable>)

Параметры

options

ReadableOptions<Readable>

Сведения о свойстве

closed

Это true после 'close' было излучено.

closed: boolean

Значение свойства

boolean

destroyed

Это true было readable.destroy() объявлено.

destroyed: boolean

Значение свойства

boolean

errored

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

errored: null | Error

Значение свойства

null | Error

readable

Безопасно ли вызывать true, то есть поток не был уничтожен и не излучался'error', или 'end'.

readable: boolean

Значение свойства

boolean

readableAborted

Возвращает, был ли поток уничтожен или допущен ошибка до излучения 'end'.

readableAborted: boolean

Значение свойства

boolean

readableDidRead

Показывает, был 'data' ли излучён.

readableDidRead: boolean

Значение свойства

boolean

readableEncoding

Getter для свойства encoding данного Readable потока. Свойство encoding можно задать с помощью метода setEncoding .

readableEncoding: null | BufferEncoding

Значение свойства

null | BufferEncoding

readableEnded

Становится true при 'end' испускании события.

readableEnded: boolean

Значение свойства

boolean

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