Readable class

Extends

Stream

Propriedades

closed

É true depois 'close' que foi emitido.

destroyed

É true depois readable.destroy() que foi chamado.

errored

Retorna erro se o stream foi destruído com um erro.

readable

É true se for seguro chamar de read, o que significa que o fluxo não foi destruído ou emitido 'error' ou 'end'.

readableAborted

Retorna se o fluxo foi destruído ou cometeu erro antes de emitir 'end'.

readableDidRead

Retorna se 'data' foi emitido.

readableEncoding

Getter para a propriedade encoding de um determinado Readable riacho. A encoding propriedade pode ser definida usando o método setCoding .

readableEnded

Torna-se true quando 'end' o evento é emitido.

readableFlowing

Essa propriedade reflete o estado atual de um Readable riacho conforme descrito na seção dos Três estados .

readableHighWaterMark

Retorna o valor de highWaterMark passado ao criar esse Readable.

readableLength

Essa propriedade contém o número de bytes (ou objetos) na fila prontos para serem lidos. O valor fornece dados de introspecção sobre o status do highWaterMark.

readableObjectMode

Getter para a propriedade objectMode de um determinado Readable riacho.

Métodos

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) é equivalente a stream.compose(readable, s).

Esse método também permite que um AbortSignal seja fornecido, que destruirá o fluxo composto quando abortado.

Consulte stream.compose(...streams) para obter mais informações.

destroy(Error)

Destrua o fluxo. Opcionalmente, emita um 'error' evento e emita um 'close' evento (a menos que emitClose esteja definido como false). Após essa chamada, o fluxo legível liberará quaisquer recursos internos e as chamadas subsequentes push() serão ignoradas.

Uma vez destroy() chamada, quaisquer chamadas adicionais serão no-op e nenhum erro adicional, exceto from _destroy() pode ser emitido como 'error'.

Implementadores não devem sobrepor esse método, mas sim implementar readable._destroy().

drop(number, Abortable)

Esse método retorna um novo fluxo com os primeiros blocos de limite eliminados desde o início.

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

Esse método é semelhante a Array.prototype.every e chama fn em cada bloco do fluxo para verificar se todos os valores de retorno aguardados são veridade para fn. Uma vez que uma chamada fn em um valor de retorno ed chunk awaité falsa, o fluxo é destruído e a promessa é cumprida com false. Se todas as chamadas fn nos chunks retornam um valor truthy, a promessa é cumprida com true.

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

Esse método permite filtrar o fluxo. Para cada pedaço no fluxo, a função fn será chamada e, se devolver um valor truthy, o pedaço será passado para o fluxo resultante. Se a função fn devolver uma promessa - essa promessa será awaited.

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

Esse método é semelhante a Array.prototype.find e chama fn em cada bloco do fluxo para encontrar um trecho com um valor truthy para fn. Uma vez que o valor de retorno aguardado de uma chamada fn é truthy, o fluxo é destruído e a promessa é cumprida com valor pelo qual fn retornou um valor truthy. Se todas as chamadas fn nos chunks devolverem um valor falso, a promessa é cumprida com undefined.

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

Esse método retorna um novo fluxo aplicando o callback dado a cada pedaço do fluxo e então achatando o resultado.

É possível retornar um stream ou outro iterável iterável ou assíncrono a partir do fn e os fluxos resultantes serão fundidos (achatados) no fluxo retornado.

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

Esse método permite iterar um fluxo. Para cada pedaço no fluxo, a função fn será chamada. Se a função fn devolver uma promessa - essa promessa será awaited.

Esse método é diferente dos for await...of loops porque pode processar chunks simultaneamente opcionalmente. Além disso, uma forEach iteração só pode ser interrompida se tiver passado uma signal opção e abortar o AbortController relacionado, enquanto for await...of pode ser parada com break ou return. Em qualquer dos casos, o riacho será destruído.

Esse método é diferente de ouvir o 'data' evento, pois utiliza o readable evento na máquina subjacente e pode limitar o número de chamadas fn concorrentes.

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

Um método utilitário para criar Fluxos Legíveis a partir de iteradores.

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

Um método utilitário para criar um Readable a partir de uma web ReadableStream.

isDisturbed(ReadableStream<any> | ReadableStream)

Retorna se a transmissão foi lida ou cancelada.

isPaused()

O readable.isPaused() método retorna o estado operacional atual do Readable. Isso é usado principalmente pelo mecanismo que fundamenta o readable.pipe() método. Na maioria dos casos comuns, não haverá motivo para usar esse método diretamente.

const readable = new stream.Readable();

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

O iterador criado por esse método dá aos usuários a opção de cancelar a destruição do fluxo se o for await...of loop for encerrado por return, break, ou throw, ou se o iterador destruir o fluxo caso o fluxo emitisse um erro durante a iteração.

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)

Esse método permite mapear sobre o fluxo. A função fn será chamada para cada pedaço no fluxo. Se a função fn devolver uma promessa - essa promessa será awaited antes de ser passada para o fluxo de resultados.

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

O readable.pause() método fará com que um fluxo em modo de fluxo pare de emitir 'data' eventos, saindo do modo de fluxo. Qualquer dado que fique disponível permanecerá no buffer interno.

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

O readable.pause() método não tem efeito se houver um 'readable' ouvinte de eventos.

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)

O readable.read() método lê os dados do buffer interno e os retorna. Se nenhum dado estiver disponível para leitura, null é retornado. Por padrão, os dados são retornados como objeto Buffer , a menos que uma codificação tenha sido especificada usando o readable.setEncoding() método ou o fluxo esteja operando no modo objeto.

O argumento opcional size especifica um número específico de bytes a serem lidos. Se size bytes não estiverem disponíveis para leitura, null serão retornados, a menos que o fluxo tenha terminado, caso em que todos os dados restantes no buffer interno serão retornados.

Se o size argumento não for especificado, todos os dados contidos no buffer interno serão devolvidos.

O size argumento deve ser menor ou igual a 1 GiB.

O readable.read() método deve ser chamado apenas em Readable fluxos operando em modo pausado. No modo de fluxo, readable.read() é chamado automaticamente até que o buffer interno esteja totalmente drenado.

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

Cada chamada retorna readable.read() um pedaço de dados, ou null. Os chunks não são concatenados. Um while loop é necessário para consumir todos os dados atualmente no buffer. Ao ler, um arquivo .read() grande pode retornar null, tendo consumido todo o conteúdo armazenado até então, mas ainda há mais dados que ainda não estão armazenados. Nesse caso, um novo 'readable' evento será emitido quando houver mais dados no buffer. Finalmente, o 'end' evento será emitido quando não houver mais dados a serem divulgados.

Portanto, para ler todo o conteúdo de um arquivo a partir de um readable, é necessário coletar blocos de múltiplos 'readable' eventos:

const chunks = [];

readable.on('readable', () => {
  let chunk;
  while (null !== (chunk = readable.read())) {
    chunks.push(chunk);
  }
});

readable.on('end', () => {
  const content = chunks.join('');
});

Um Readable fluxo no modo objeto sempre retornará um único item de uma chamada para readable.read(size), independentemente do valor do size argumento.

Se o readable.read() método retornar um pedaço de dados, um 'data' evento também será emitido.

A chamada de leitura após a 'end' emissão do evento retornará null. Nenhum erro de execução será gerado.

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

Esse método chama fn em cada pedaço do fluxo em ordem, passando o resultado do cálculo no elemento anterior. Ele retorna uma promessa do valor final da redução.

Se nenhum valor inicial for fornecido, o primeiro trecho do fluxo é usado como valor inicial. Se o fluxo estiver vazio, a promessa é rejeitada com a TypeError com a ERR_INVALID_ARGS propriedade de código.

A função redutora itera o fluxo elemento por elemento, o que significa que não há parâmetro de concorrência ou paralelismo. Para realizar uma redução simultaneamente, você pode extrair a função assíncrona do método 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()

O readable.resume() método faz com que um fluxo explicitamente Readable pausado retome a 'data' emissão de eventos, mudando o fluxo para o modo de fluxo.

O readable.resume() método pode ser usado para consumir totalmente os dados de um fluxo sem realmente processar nenhum desses dados:

getReadableStreamSomehow()
  .resume()
  .on('end', () => {
    console.log('Reached the end, but did not read anything.');
  });

O readable.resume() método não tem efeito se houver um 'readable' ouvinte de eventos.

setEncoding(BufferEncoding)

O readable.setEncoding() método define a codificação de caracteres para dados lidos do Readable fluxo.

Por padrão, nenhuma codificação é atribuída e os dados do fluxo serão retornados como Buffer objetos. Definir uma codificação faz com que os dados do fluxo sejam retornados como cadeias da codificação especificada, em vez de como Buffer objetos. Por exemplo, chamar readable.setEncoding('utf8') fará com que os dados de saída sejam interpretados como dados UTF-8 e passados como strings. Chamar readable.setEncoding('hex') fará com que os dados sejam codificados em formato hexadecimal de string.

O Readable fluxo lida corretamente com caracteres de múltiplos bytes entregues pelo fluxo que, de outra forma, seriam decodificados de forma incorreta se simplesmente puxados do fluxo como Buffer objetos.

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">)

Esse método é semelhante a Array.prototype.some e chama fn em cada pedaço do fluxo até que o valor de retorno aguardado seja true (ou qualquer valor truthy). Uma vez que uma chamada fn em um valor de retorno de chunk awaited é vera, o fluxo é destruído e a promessa é cumprida com true. Se nenhuma das chamadas de fn nos chunks devolver um valor truthy, a promessa é cumprida com false.

take(number, Abortable)

Esse método retorna um novo fluxo com os primeiros blocos limite .

toArray(Abortable)

Esse método permite obter facilmente o conteúdo de um fluxo.

Como esse método lê todo o fluxo na memória, anula os benefícios dos fluxos. Ele é pensado para interoperabilidade e conveniência, não como a principal forma de consumir streams.

toWeb(ReadableStream, ReadableToWebOptions)

Um método utilitário para criar uma teia ReadableStream a partir de um Readable.

unpipe(WritableStream)

O readable.unpipe() método desprende um Writable fluxo de água previamente conectado usando o método do tubo .

Se o destination não for especificado, então todos os tubos são destacados.

Se o destination for especificado, mas nenhum tubo for configurado para isso, então o método não faz nada.

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)

Passar chunk como null sinaliza o fim do fluxo (EOF) e se comporta da mesma forma que readable.push(null), após o qual não é possível mais escrever dados. O sinal EOF é colocado no final do buffer e quaisquer dados armazenados ainda serão esvaziados.

O readable.unshift() método empurra um pedaço de dados de volta para o buffer interno. Isso é útil em certas situações em que um fluxo está sendo consumido por código que precisa "desconsumir" uma quantidade de dados que ele retirou otimisticamente da fonte, para que os dados possam ser repassados para outra parte.

O stream.unshift(chunk) método não pode ser chamado após o 'end' evento ter sido emitido ou um erro em tempo de execução será lançado.

Desenvolvedores que usam stream.unshift() frequentemente devem considerar mudar para o uso de um Transform stream. Veja a API for stream implementers seção para mais informações.

// 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;
    }
  }
}

Ao contrário do push, não stream.unshift(chunk) encerra o processo de leitura ao resetar o estado interno de leitura do fluxo. Isso pode causar resultados inesperados se readable.unshift() for chamado durante uma leitura (ou seja, de dentro de uma implementação _read em um fluxo personalizado). Seguir a chamada com readable.unshift() um push imediato resetará o estado de leitura adequadamente, porém é melhor simplesmente evitar ligar readable.unshift() durante o processo de leitura.

wrap(ReadableStream)

Antes do Node.js 0.10, os streams não implementavam toda node:stream a API do módulo como ela está definida atualmente. (Veja Compatibility para mais informações.)

Ao usar uma biblioteca Node.js antiga que emite 'data' eventos e possui um método de pausa apenas consultivo, o readable.wrap() método pode ser usado para criar um Readable fluxo que usa o fluxo antigo como fonte de dados.

Raramente será necessário usá-lo readable.wrap() , mas o método foi oferecido como uma conveniência para interagir com aplicativos e bibliotecas Node.js mais antigos.

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

Quando a --experimental-stream-iter flag está ativada, Readable os fluxos implementam o Stream.toAsyncStreamable protocolo, permitindo um consumo eficiente pela stream/iter API.

Isso fornece um iterador assíncrono em lote que drena o buffer interno do fluxo em Uint8Array[] lotes, amortizando a sobrecarga Promise por bloco do caminho padrão Symbol.asyncIterator . Para fluxos em modo byte, chunks são fornecidos diretamente como Buffer instâncias (que são Uint8Array subclasses). Para fluxos em modo objeto ou codificados, cada bloco é normalizado para Uint8Array antes do loteamento.

O iterador retornado é marcado como fonte validada, então from() o passa sem normalização adicional.

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'

Sem a --experimental-stream-iter flag, chamar esse método lança ERR_STREAM_ITER_MISSING_FLAG.

Métodos herdados

eventNames()

Retorna uma matriz listando os eventos para os quais o emissor registrou ouvintes.

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

Retorna o valor máximo atual do ouvinte para o EventEmitter que é definido por emitter.setMaxListeners(n) ou usa como padrão events.defaultMaxListeners.

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

Por padrão, EventEmitterimprimirão um aviso se mais de 10 ouvintes forem adicionados para um evento específico. Esse é um padrão útil que ajuda a localizar vazamentos de memória. O método emitter.setMaxListeners() permite que o limite seja modificado para esta instância de EventEmitter específica. O valor pode ser definido como Infinity (ou 0) para indicar um número ilimitado de ouvintes.

Retorna uma referência ao EventEmitter, para que as chamadas possam ser encadeadas.

[captureRejectionSymbol](Error, string | symbol, any[])

O Symbol.for('nodejs.rejection') método é chamado caso ocorra uma rejeição de promessa ao emitir um evento e captureRejections é ativado no emissor. É possível usar events.captureRejectionSymbol no lugar de 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.
  }
}

Detalhes do construtor

Readable(ReadableOptions<Readable>)

new Readable(options?: ReadableOptions<Readable>)

Parâmetros

options

ReadableOptions<Readable>

Detalhes da propriedade

closed

É true depois 'close' que foi emitido.

closed: boolean

Valor da propriedade

boolean

destroyed

É true depois readable.destroy() que foi chamado.

destroyed: boolean

Valor da propriedade

boolean

errored

Retorna erro se o stream foi destruído com um erro.

errored: null | Error

Valor da propriedade

null | Error

readable

É true se for seguro chamar de read, o que significa que o fluxo não foi destruído ou emitido 'error' ou 'end'.

readable: boolean

Valor da propriedade

boolean

readableAborted

Retorna se o fluxo foi destruído ou cometeu erro antes de emitir 'end'.

readableAborted: boolean

Valor da propriedade

boolean

readableDidRead

Retorna se 'data' foi emitido.

readableDidRead: boolean

Valor da propriedade

boolean

readableEncoding

Getter para a propriedade encoding de um determinado Readable riacho. A encoding propriedade pode ser definida usando o método setCoding .

readableEncoding: null | BufferEncoding

Valor da propriedade

null | BufferEncoding

readableEnded

Torna-se true quando 'end' o evento é emitido.

readableEnded: boolean

Valor da propriedade

boolean

readableFlowing

Essa propriedade reflete o estado atual de um Readable riacho conforme descrito na seção dos Três estados .

readableFlowing: null | boolean

Valor da propriedade

null | boolean

readableHighWaterMark

Retorna o valor de highWaterMark passado ao criar esse Readable.

readableHighWaterMark: number

Valor da propriedade

number

readableLength

Essa propriedade contém o número de bytes (ou objetos) na fila prontos para serem lidos. O valor fornece dados de introspecção sobre o status do highWaterMark.

readableLength: number

Valor da propriedade

number

readableObjectMode

Getter para a propriedade objectMode de um determinado Readable riacho.

readableObjectMode: boolean

Valor da propriedade

boolean

Detalhes do método

addListener(string | symbol, (args: any[]) => void)

function addListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

addListener<E>(E, (args: ReadableEventMap[E]) => void)

function addListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

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) é equivalente a stream.compose(readable, s).

Esse método também permite que um AbortSignal seja fornecido, que destruirá o fluxo composto quando abortado.

Consulte stream.compose(...streams) para obter mais informações.

function compose(stream: WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void, options?: Abortable): Duplex

Parâmetros

stream

WritableStream | WritableStream<any> | TransformStream<any, any> | (source: any) => void

options

Abortable

Retornos

Duplex

um fluxo composto pelo fluxo stream.

destroy(Error)

Destrua o fluxo. Opcionalmente, emita um 'error' evento e emita um 'close' evento (a menos que emitClose esteja definido como false). Após essa chamada, o fluxo legível liberará quaisquer recursos internos e as chamadas subsequentes push() serão ignoradas.

Uma vez destroy() chamada, quaisquer chamadas adicionais serão no-op e nenhum erro adicional, exceto from _destroy() pode ser emitido como 'error'.

Implementadores não devem sobrepor esse método, mas sim implementar readable._destroy().

function destroy(error?: Error): Readable

Parâmetros

error

Error

Erro que será passado como carga útil em 'error' caso de

Retornos

drop(number, Abortable)

Esse método retorna um novo fluxo com os primeiros blocos de limite eliminados desde o início.

function drop(limit: number, options?: Abortable): Readable

Parâmetros

limit

number

o número de blocos a serem eliminados do legível.

options

Abortable

Retornos

um stream com blocos limite descartados desde o início.

emit(string | symbol, any[])

function emit(eventName: string | symbol, args: any[]): boolean

Parâmetros

eventName

string | symbol

args

any[]

Retornos

boolean

emit<E>(E, ReadableEventMap[E])

function emit<E>(eventName: E, args: ReadableEventMap[E]): boolean

Parâmetros

eventName

E

args

ReadableEventMap[E]

Retornos

boolean

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

Esse método é semelhante a Array.prototype.every e chama fn em cada bloco do fluxo para verificar se todos os valores de retorno aguardados são veridade para fn. Uma vez que uma chamada fn em um valor de retorno ed chunk awaité falsa, o fluxo é destruído e a promessa é cumprida com false. Se todas as chamadas fn nos chunks retornam um valor truthy, a promessa é cumprida com true.

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

Parâmetros

fn

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

uma função para chamar cada pedaço do fluxo. Assíncrono ou não.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

Promise<boolean>

Uma promessa avaliando se trueo FN devolveu um valor de verdade para cada um dos blocos.

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

Esse método permite filtrar o fluxo. Para cada pedaço no fluxo, a função fn será chamada e, se devolver um valor truthy, o pedaço será passado para o fluxo resultante. Se a função fn devolver uma promessa - essa promessa será awaited.

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

Parâmetros

fn

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

uma função para filtrar chunks do fluxo. Assíncrono ou não.

options

ReadableOperatorOptions

Retornos

um fluxo filtrado com o predicado 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>

Parâmetros

fn

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

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

Promise<any>

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

Esse método é semelhante a Array.prototype.find e chama fn em cada bloco do fluxo para encontrar um trecho com um valor truthy para fn. Uma vez que o valor de retorno aguardado de uma chamada fn é truthy, o fluxo é destruído e a promessa é cumprida com valor pelo qual fn retornou um valor truthy. Se todas as chamadas fn nos chunks devolverem um valor falso, a promessa é cumprida com undefined.

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

Parâmetros

fn

(data: any, options?: Abortable) => data

uma função para chamar cada pedaço do fluxo. Assíncrono ou não.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

Promise<undefined | T>

uma promessa avaliando até o primeiro bloco para o qual fn avaliou com um valor truthy, ou undefined se nenhum elemento foi encontrado.

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

Esse método retorna um novo fluxo aplicando o callback dado a cada pedaço do fluxo e então achatando o resultado.

É possível retornar um stream ou outro iterável iterável ou assíncrono a partir do fn e os fluxos resultantes serão fundidos (achatados) no fluxo retornado.

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

Parâmetros

fn

(data: any, options?: Abortable) => any

uma função para mapear cada trecho do fluxo. Pode ser assíncrono. Pode ser um jato ou gerador.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

um fluxo mapeado planamente com a função fn.

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

Esse método permite iterar um fluxo. Para cada pedaço no fluxo, a função fn será chamada. Se a função fn devolver uma promessa - essa promessa será awaited.

Esse método é diferente dos for await...of loops porque pode processar chunks simultaneamente opcionalmente. Além disso, uma forEach iteração só pode ser interrompida se tiver passado uma signal opção e abortar o AbortController relacionado, enquanto for await...of pode ser parada com break ou return. Em qualquer dos casos, o riacho será destruído.

Esse método é diferente de ouvir o 'data' evento, pois utiliza o readable evento na máquina subjacente e pode limitar o número de chamadas fn concorrentes.

function forEach(fn: (data: any, options?: Abortable) => void | Promise<void>, options?: Pick<ReadableOperatorOptions, "signal" | "concurrency">): Promise<void>

Parâmetros

fn

(data: any, options?: Abortable) => void | Promise<void>

uma função para chamar cada pedaço do fluxo. Assíncrono ou não.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

Promise<void>

uma promessa para quando a transmissão terminar.

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

Um método utilitário para criar Fluxos Legíveis a partir de iteradores.

static function from(iterable: Iterable<any> | AsyncIterable<any>, options?: ReadableOptions<Readable>): Readable

Parâmetros

iterable

Iterable<any> | AsyncIterable<any>

Objeto implementando o Symbol.asyncIterator protocolo iterável Symbol.iterator ou Item. Emite um evento de 'erro' se um valor nulo for passado.

options

ReadableOptions<Readable>

Opções fornecidas para new stream.Readable([options]). Por padrão, definirá Readable.from() para options.objectMode, a menos que isso seja explicitamente desativado definindo true para options.objectMode. false

Retornos

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

Um método utilitário para criar um Readable a partir de uma web ReadableStream.

static function fromWeb(readableStream: ReadableStream<any>, options?: Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">): Readable

Parâmetros

readableStream

ReadableStream<any>

options

Pick<ReadableOptions<Readable>, "encoding" | "highWaterMark" | "objectMode" | "signal">

Retornos

isDisturbed(ReadableStream<any> | ReadableStream)

Retorna se a transmissão foi lida ou cancelada.

static function isDisturbed(stream: ReadableStream<any> | ReadableStream): boolean

Parâmetros

stream

ReadableStream<any> | ReadableStream

Retornos

boolean

isPaused()

O readable.isPaused() método retorna o estado operacional atual do Readable. Isso é usado principalmente pelo mecanismo que fundamenta o readable.pipe() método. Na maioria dos casos comuns, não haverá motivo para usar esse método diretamente.

const readable = new stream.Readable();

readable.isPaused(); // === false
readable.pause();
readable.isPaused(); // === true
readable.resume();
readable.isPaused(); // === false
function isPaused(): boolean

Retornos

boolean

iterator(ReadableIteratorOptions)

O iterador criado por esse método dá aos usuários a opção de cancelar a destruição do fluxo se o for await...of loop for encerrado por return, break, ou throw, ou se o iterador destruir o fluxo caso o fluxo emitisse um erro durante a iteração.

function iterator(options?: ReadableIteratorOptions): AsyncIterator<any, undefined, any>

Parâmetros

options

ReadableIteratorOptions

Retornos

AsyncIterator<any, undefined, any>

listenerCount(string | symbol, (args: any[]) => void)

function listenerCount(eventName: string | symbol, listener?: (args: any[]) => void): number

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

number

listenerCount<E>(E, (args: ReadableEventMap[E]) => void)

function listenerCount<E>(eventName: E, listener?: (args: ReadableEventMap[E]) => void): number

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

number

listeners(string | symbol)

function listeners(eventName: string | symbol): (args: any[]) => void[]

Parâmetros

eventName

string | symbol

Retornos

(args: any[]) => void[]

listeners<E>(E)

function listeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]

Parâmetros

eventName

E

Retornos

(args: ReadableEventMap[E]) => void[]

map((data: any, options?: Abortable) => any, ReadableOperatorOptions)

Esse método permite mapear sobre o fluxo. A função fn será chamada para cada pedaço no fluxo. Se a função fn devolver uma promessa - essa promessa será awaited antes de ser passada para o fluxo de resultados.

function map(fn: (data: any, options?: Abortable) => any, options?: ReadableOperatorOptions): Readable

Parâmetros

fn

(data: any, options?: Abortable) => any

uma função para mapear cada trecho do fluxo. Assíncrono ou não.

options

ReadableOperatorOptions

Retornos

um fluxo mapeado com a função fn.

off(string | symbol, (args: any[]) => void)

function off(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

off<E>(E, (args: ReadableEventMap[E]) => void)

function off<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

on(string | symbol, (args: any[]) => void)

function on(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

on<E>(E, (args: ReadableEventMap[E]) => void)

function on<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

once(string | symbol, (args: any[]) => void)

function once(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

once<E>(E, (args: ReadableEventMap[E]) => void)

function once<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

pause()

O readable.pause() método fará com que um fluxo em modo de fluxo pare de emitir 'data' eventos, saindo do modo de fluxo. Qualquer dado que fique disponível permanecerá no buffer interno.

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

O readable.pause() método não tem efeito se houver um 'readable' ouvinte de eventos.

function pause(): Readable

Retornos

prependListener(string | symbol, (args: any[]) => void)

function prependListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

prependListener<E>(E, (args: ReadableEventMap[E]) => void)

function prependListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

prependOnceListener(string | symbol, (args: any[]) => void)

function prependOnceListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

prependOnceListener<E>(E, (args: ReadableEventMap[E]) => void)

function prependOnceListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

push(any, BufferEncoding)

function push(chunk: any, encoding?: BufferEncoding): boolean

Parâmetros

chunk

any

encoding

BufferEncoding

Retornos

boolean

rawListeners(string | symbol)

function rawListeners(eventName: string | symbol): (args: any[]) => void[]

Parâmetros

eventName

string | symbol

Retornos

(args: any[]) => void[]

rawListeners<E>(E)

function rawListeners<E>(eventName: E): (args: ReadableEventMap[E]) => void[]

Parâmetros

eventName

E

Retornos

(args: ReadableEventMap[E]) => void[]

read(number)

O readable.read() método lê os dados do buffer interno e os retorna. Se nenhum dado estiver disponível para leitura, null é retornado. Por padrão, os dados são retornados como objeto Buffer , a menos que uma codificação tenha sido especificada usando o readable.setEncoding() método ou o fluxo esteja operando no modo objeto.

O argumento opcional size especifica um número específico de bytes a serem lidos. Se size bytes não estiverem disponíveis para leitura, null serão retornados, a menos que o fluxo tenha terminado, caso em que todos os dados restantes no buffer interno serão retornados.

Se o size argumento não for especificado, todos os dados contidos no buffer interno serão devolvidos.

O size argumento deve ser menor ou igual a 1 GiB.

O readable.read() método deve ser chamado apenas em Readable fluxos operando em modo pausado. No modo de fluxo, readable.read() é chamado automaticamente até que o buffer interno esteja totalmente drenado.

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

Cada chamada retorna readable.read() um pedaço de dados, ou null. Os chunks não são concatenados. Um while loop é necessário para consumir todos os dados atualmente no buffer. Ao ler, um arquivo .read() grande pode retornar null, tendo consumido todo o conteúdo armazenado até então, mas ainda há mais dados que ainda não estão armazenados. Nesse caso, um novo 'readable' evento será emitido quando houver mais dados no buffer. Finalmente, o 'end' evento será emitido quando não houver mais dados a serem divulgados.

Portanto, para ler todo o conteúdo de um arquivo a partir de um readable, é necessário coletar blocos de múltiplos 'readable' eventos:

const chunks = [];

readable.on('readable', () => {
  let chunk;
  while (null !== (chunk = readable.read())) {
    chunks.push(chunk);
  }
});

readable.on('end', () => {
  const content = chunks.join('');
});

Um Readable fluxo no modo objeto sempre retornará um único item de uma chamada para readable.read(size), independentemente do valor do size argumento.

Se o readable.read() método retornar um pedaço de dados, um 'data' evento também será emitido.

A chamada de leitura após a 'end' emissão do evento retornará null. Nenhum erro de execução será gerado.

function read(size?: number): any

Parâmetros

size

number

Argumento opcional para especificar quanto de dados ler.

Retornos

any

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

Esse método chama fn em cada pedaço do fluxo em ordem, passando o resultado do cálculo no elemento anterior. Ele retorna uma promessa do valor final da redução.

Se nenhum valor inicial for fornecido, o primeiro trecho do fluxo é usado como valor inicial. Se o fluxo estiver vazio, a promessa é rejeitada com a TypeError com a ERR_INVALID_ARGS propriedade de código.

A função redutora itera o fluxo elemento por elemento, o que significa que não há parâmetro de concorrência ou paralelismo. Para realizar uma redução simultaneamente, você pode extrair a função assíncrona do método readable.map .

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

Parâmetros

fn

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

uma função redutora para chamar cada pedaço do fluxo. Assíncrono ou não.

Retornos

Promise<T>

uma promessa do valor final da redução.

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>

Parâmetros

fn

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

initial

T

options

Abortable

Retornos

Promise<T>

removeAllListeners(string | symbol)

function removeAllListeners(eventName?: string | symbol): Readable

Parâmetros

eventName

string | symbol

Retornos

removeAllListeners<E>(E)

function removeAllListeners<E>(eventName?: E): Readable

Parâmetros

eventName

E

Retornos

removeListener(string | symbol, (args: any[]) => void)

function removeListener(eventName: string | symbol, listener: (args: any[]) => void): Readable

Parâmetros

eventName

string | symbol

listener

(args: any[]) => void

Retornos

removeListener<E>(E, (args: ReadableEventMap[E]) => void)

function removeListener<E>(eventName: E, listener: (args: ReadableEventMap[E]) => void): Readable

Parâmetros

eventName

E

listener

(args: ReadableEventMap[E]) => void

Retornos

resume()

O readable.resume() método faz com que um fluxo explicitamente Readable pausado retome a 'data' emissão de eventos, mudando o fluxo para o modo de fluxo.

O readable.resume() método pode ser usado para consumir totalmente os dados de um fluxo sem realmente processar nenhum desses dados:

getReadableStreamSomehow()
  .resume()
  .on('end', () => {
    console.log('Reached the end, but did not read anything.');
  });

O readable.resume() método não tem efeito se houver um 'readable' ouvinte de eventos.

function resume(): Readable

Retornos

setEncoding(BufferEncoding)

O readable.setEncoding() método define a codificação de caracteres para dados lidos do Readable fluxo.

Por padrão, nenhuma codificação é atribuída e os dados do fluxo serão retornados como Buffer objetos. Definir uma codificação faz com que os dados do fluxo sejam retornados como cadeias da codificação especificada, em vez de como Buffer objetos. Por exemplo, chamar readable.setEncoding('utf8') fará com que os dados de saída sejam interpretados como dados UTF-8 e passados como strings. Chamar readable.setEncoding('hex') fará com que os dados sejam codificados em formato hexadecimal de string.

O Readable fluxo lida corretamente com caracteres de múltiplos bytes entregues pelo fluxo que, de outra forma, seriam decodificados de forma incorreta se simplesmente puxados do fluxo como Buffer objetos.

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

Parâmetros

encoding

BufferEncoding

A codificação a utilizar.

Retornos

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

Esse método é semelhante a Array.prototype.some e chama fn em cada pedaço do fluxo até que o valor de retorno aguardado seja true (ou qualquer valor truthy). Uma vez que uma chamada fn em um valor de retorno de chunk awaited é vera, o fluxo é destruído e a promessa é cumprida com true. Se nenhuma das chamadas de fn nos chunks devolver um valor truthy, a promessa é cumprida com false.

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

Parâmetros

fn

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

uma função para chamar cada pedaço do fluxo. Assíncrono ou não.

options

Pick<ReadableOperatorOptions, "signal" | "concurrency">

Retornos

Promise<boolean>

Uma promessa avaliando se trueo FN retornou um valor de verdade para pelo menos um dos blocos.

take(number, Abortable)

Esse método retorna um novo fluxo com os primeiros blocos limite .

function take(limit: number, options?: Abortable): Readable

Parâmetros

limit

number

O número de blocos a serem retirados do legível.

options

Abortable

Retornos

um stream com blocos limite ocupados.

toArray(Abortable)

Esse método permite obter facilmente o conteúdo de um fluxo.

Como esse método lê todo o fluxo na memória, anula os benefícios dos fluxos. Ele é pensado para interoperabilidade e conveniência, não como a principal forma de consumir streams.

function toArray(options?: Abortable): Promise<any[]>

Parâmetros

options

Abortable

Retornos

Promise<any[]>

uma promessa contendo um array com o conteúdo do fluxo.

toWeb(ReadableStream, ReadableToWebOptions)

Um método utilitário para criar uma teia ReadableStream a partir de um Readable.

static function toWeb(streamReadable: ReadableStream, options?: ReadableToWebOptions): ReadableStream<any>

Parâmetros

streamReadable

ReadableStream

options

ReadableToWebOptions

Retornos

ReadableStream<any>

unpipe(WritableStream)

O readable.unpipe() método desprende um Writable fluxo de água previamente conectado usando o método do tubo .

Se o destination não for especificado, então todos os tubos são destacados.

Se o destination for especificado, mas nenhum tubo for configurado para isso, então o método não faz nada.

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

Parâmetros

destination

WritableStream

Fluxo específico opcional para despipear

Retornos

unshift(any, BufferEncoding)

Passar chunk como null sinaliza o fim do fluxo (EOF) e se comporta da mesma forma que readable.push(null), após o qual não é possível mais escrever dados. O sinal EOF é colocado no final do buffer e quaisquer dados armazenados ainda serão esvaziados.

O readable.unshift() método empurra um pedaço de dados de volta para o buffer interno. Isso é útil em certas situações em que um fluxo está sendo consumido por código que precisa "desconsumir" uma quantidade de dados que ele retirou otimisticamente da fonte, para que os dados possam ser repassados para outra parte.

O stream.unshift(chunk) método não pode ser chamado após o 'end' evento ter sido emitido ou um erro em tempo de execução será lançado.

Desenvolvedores que usam stream.unshift() frequentemente devem considerar mudar para o uso de um Transform stream. Veja a API for stream implementers seção para mais informações.

// 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;
    }
  }
}

Ao contrário do push, não stream.unshift(chunk) encerra o processo de leitura ao resetar o estado interno de leitura do fluxo. Isso pode causar resultados inesperados se readable.unshift() for chamado durante uma leitura (ou seja, de dentro de uma implementação _read em um fluxo personalizado). Seguir a chamada com readable.unshift() um push imediato resetará o estado de leitura adequadamente, porém é melhor simplesmente evitar ligar readable.unshift() durante o processo de leitura.

function unshift(chunk: any, encoding?: BufferEncoding)

Parâmetros

chunk

any

Pedaço de dados para deslocar na fila de leitura. Para fluxos que não operam no modo objeto, chunk deve haver uma {string}, {Buffer}, {TypedArray}, {DataView} ou null. Para fluxos em modo objeto, chunk pode ser qualquer valor JavaScript.

encoding

BufferEncoding

Codificação de blocos de cadeia. Deve ser uma codificação válida Buffer , como 'utf8' ou 'ascii'.

wrap(ReadableStream)

Antes do Node.js 0.10, os streams não implementavam toda node:stream a API do módulo como ela está definida atualmente. (Veja Compatibility para mais informações.)

Ao usar uma biblioteca Node.js antiga que emite 'data' eventos e possui um método de pausa apenas consultivo, o readable.wrap() método pode ser usado para criar um Readable fluxo que usa o fluxo antigo como fonte de dados.

Raramente será necessário usá-lo readable.wrap() , mas o método foi oferecido como uma conveniência para interagir com aplicativos e bibliotecas Node.js mais antigos.

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

Parâmetros

stream

ReadableStream

Um fluxo legível "ao estilo antigo"

Retornos

[asyncIterator]()

function [asyncIterator](): AsyncIterator<any, undefined, any>

Retornos

AsyncIterator<any, undefined, any>

AsyncIterator para consumir totalmente o fluxo.

[toAsyncStreamable]()

Quando a --experimental-stream-iter flag está ativada, Readable os fluxos implementam o Stream.toAsyncStreamable protocolo, permitindo um consumo eficiente pela stream/iter API.

Isso fornece um iterador assíncrono em lote que drena o buffer interno do fluxo em Uint8Array[] lotes, amortizando a sobrecarga Promise por bloco do caminho padrão Symbol.asyncIterator . Para fluxos em modo byte, chunks são fornecidos diretamente como Buffer instâncias (que são Uint8Array subclasses). Para fluxos em modo objeto ou codificados, cada bloco é normalizado para Uint8Array antes do loteamento.

O iterador retornado é marcado como fonte validada, então from() o passa sem normalização adicional.

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'

Sem a --experimental-stream-iter flag, chamar esse método lança ERR_STREAM_ITER_MISSING_FLAG.

function [toAsyncStreamable](): ByteReadableStream

Retornos

ByteReadableStream

Detalhes do método herdado

eventNames()

Retorna uma matriz listando os eventos para os quais o emissor registrou ouvintes.

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)[]

Retornos

(string | symbol)[]

Herdado de Stream.eventNames

getMaxListeners()

Retorna o valor máximo atual do ouvinte para o EventEmitter que é definido por emitter.setMaxListeners(n) ou usa como padrão events.defaultMaxListeners.

function getMaxListeners(): number

Retornos

number

Herdado de Stream.getMaxListeners

pipe<T>(T, PipeOptions)

function pipe<T>(destination: T, options?: PipeOptions): T

Parâmetros

destination

T

options

PipeOptions

Retornos

T

Herdado de Stream.pipe

setMaxListeners(number)

Por padrão, EventEmitterimprimirão um aviso se mais de 10 ouvintes forem adicionados para um evento específico. Esse é um padrão útil que ajuda a localizar vazamentos de memória. O método emitter.setMaxListeners() permite que o limite seja modificado para esta instância de EventEmitter específica. O valor pode ser definido como Infinity (ou 0) para indicar um número ilimitado de ouvintes.

Retorna uma referência ao EventEmitter, para que as chamadas possam ser encadeadas.

function setMaxListeners(n: number): Readable

Parâmetros

n

number

Retornos

Herdado de Stream.setMaxOuvintes

[captureRejectionSymbol](Error, string | symbol, any[])

O Symbol.for('nodejs.rejection') método é chamado caso ocorra uma rejeição de promessa ao emitir um evento e captureRejections é ativado no emissor. É possível usar events.captureRejectionSymbol no lugar de 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[])

Parâmetros

error

Error

event

string | symbol

args

any[]

Herdado de Stream.__@captureRejectionSymbol@180