Readable class

Rozszerzenie

Stream

Właściwości

closed

Po true'close' emisji jest już wyemitowany.

destroyed

To true po readable.destroy() tym, co zostało wezwane.

errored

Zwraca błąd, jeśli strumień został zniszczony błędem.

readable

Jest true to, czy bezpiecznie jest wywołać odczyt, co oznacza, że strumień nie został zniszczony ani emitowany 'error' lub 'end'.

readableAborted

Zwraca, czy strumień został zniszczony lub wprowadzony błąd przed emisją 'end'.

readableDidRead

Zwraca się, czy 'data' został wyemitowany.

readableEncoding

Getter dla własności encoding danego Readable strumienia. Właściwość tę encoding można ustawić za pomocą metody setEncoded .

readableEnded

Staje się true , gdy 'end' wydawane jest zdarzenie.

readableFlowing

Ta własność odzwierciedla obecny stan strumienia Readable opisany w sekcji Trzy stany .

readableHighWaterMark

Zwraca wartość przekazanej podczas highWaterMark tworzenia tego Readable.

readableLength

Ta właściwość zawiera liczbę bajtów (lub obiektów) w kolejce gotowych do odczytu. Wartość ta dostarcza danych introspekcyjnych dotyczących statusu .highWaterMark

readableObjectMode

Getter dla własności objectMode danego Readable strumienia.

Metody

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) jest równoważne z stream.compose(readable, s).

Ta metoda pozwala również na dostosowanie strumienia AbortSignal , który zniszczy złożony strumień po przerwaniu.

Aby uzyskać więcej informacji, zobacz stream.compose(...streams).

destroy(Error)

Zniszczyć strumień. Opcjonalnie wyemituj 'error' zdarzenie, a następnie wyemituje zdarzenie 'close' (chyba że emitClose jest ustawione na false). Po tym wywołaniu czytelny strumień zwolni wszelkie wewnętrzne zasoby, a kolejne wezwania push() zostaną zignorowane.

Po destroy() wywołaniu wszelkie kolejne wywołania będą no-op i nie pojawią się żadne kolejne błędy poza , _destroy() które mogą być emitowane jako .'error'

Implementatorzy nie powinni nadpisywać tej metody, lecz zamiast tego implementować readable._destroy().

drop(number, Abortable)

Ta metoda zwraca nowy strumień z pierwszymi blokami limitu odrzucone od początku.

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

Ta metoda jest podobna do Array.prototype.every i wywołuje fn na każdym chunku w strumieniu, aby sprawdzić, czy wszystkie oczekiwane wartości zwrotne są prawdziwe dla fn. Gdy wywołanie fn na wartości zwrotu bloku awaitjest fałszywe, strumień zostaje zniszczony, a obietnica spełniona przez false. Jeśli wszystkie wywołania fn na blokach zwracają wartość prawdziwą, obietnica jest spełniona przez true.

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

Ta metoda pozwala na filtrowanie strumienia. Dla każdego fragmentu strumienia wywołana zostanie funkcja fn i jeśli zwróci wartość prawdziwą, fragment zostanie przekazany do strumienia wyniku. Jeśli funkcja fn zwraca obietnicę – ta obietnica będzie ed await.

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

Ta metoda jest podobna do Array.prototype.find i wywołuje fn na każdym chunku w strumieniu, aby znaleźć chunk z prawdziwą wartością fn. Gdy oczekiwana wartość zwrotu wywołania fn jest prawdziwa, strumień zostaje zniszczony, a obietnica spełniona z wartością, dla której fn zwrócił wartość prawdziwą. Jeśli wszystkie wywołania fn na blokach zwracają fałszywą wartość, obietnica jest spełniona przez undefined.

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

Ta metoda zwraca nowy strumień poprzez zastosowanie danego callbacku do każdego fragmentu strumienia, a następnie spłaszczenie wyniku.

Możliwe jest zwrócenie strumienia lub innego iterowalnego lub asynchronicznego iterowalnego z fn i strumienie wynikowe zostaną połączone (spłaszczone) z zwróconym strumieniem.

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

Ta metoda pozwala na iterację strumienia. Dla każdego chunku w strumieniu wywołana zostanie funkcja fn . Jeśli funkcja fn zwraca obietnicę – ta obietnica będzie ed await.

Ta metoda różni się od for await...of pętli tym, że opcjonalnie może przetwarzać fragmenty równocześnie. Ponadto iterację forEach można zatrzymać tylko po przejściu opcji signal i przerwaniu powiązanego AbortControllera, podczas gdy for await...of można ją zatrzymać za break pomocą lub return. W obu przypadkach strumień zostanie zniszczony.

Ta metoda różni się od odsłuchu 'data' zdarzenia tym, że wykorzystuje zdarzenie readable w maszynie podstawowej i może ograniczyć liczbę jednoczesnych wywołań fn .

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

Metoda pomocnicza do tworzenia czytelnych strumieni z iteratorów.

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

Metoda pomocnicza do tworzenia z Readable sieci ReadableStream.

isDisturbed(ReadableStream<any> | ReadableStream)

Zwraca się, niezależnie od tego, czy strumień został odczytany, czy anulowany.

isPaused()

Metoda readable.isPaused() zwraca aktualny stan pracy .Readable Jest to wykorzystywane głównie przez mechanizm, który leży u podstaw tej metody readable.pipe() . W większości typowych przypadków nie ma powodu, by stosować tę metodę bezpośrednio.

const readable = new stream.Readable();

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

Iterator utworzony tą metodą daje użytkownikom możliwość anulowania zniszczenia strumienia, jeśli pętla for await...of zostanie zakończona przez return, break, lub throw, lub jeśli iterator zniszczy strumień w przypadku błędu podczas iteracji.

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)

Ta metoda pozwala na mapowanie strumienia. Funkcja fn będzie wywoływana dla każdego chunku w strumieniu. Jeśli funkcja fn zwraca obietnicę – ta obietnica zostanie ed awaitprzed przekazaniem do strumienia wyników.

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

Metoda ta readable.pause() powoduje, że strumień w trybie przepływu przestaje emitować 'data' zdarzenia, przełączając się z trybu przepływu. Wszelkie dostępne dane pozostaną w buforze wewnętrznym.

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

Metoda nie readable.pause() ma efektu, jeśli istnieje 'readable' słuchacz zdarzeń.

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)

Metoda readable.read() odczytuje dane z wewnętrznego bufora i zwraca je. Jeśli nie ma dostępnych danych do odczytu, null zwraca się. Domyślnie dane są zwracane jako obiekt, Buffer chyba że kodowanie zostało określone metodą readable.setEncoding() lub strumień działa w trybie obiektowym.

Argument opcjonalny size określa określoną liczbę bajtów do odczytu. Jeśli size bajty nie są dostępne do odczytu, zostaną zwrócone, nullchyba że strumień się zakończył, wtedy wszystkie dane pozostały w buforze wewnętrznym zostaną zwrócone.

Jeśli size argument nie zostanie określony, wszystkie dane zawarte w wewnętrznym buforze zostaną zwrócone.

Argument size musi być mniejszy lub równy 1 GiB.

Metoda powinna readable.read() być wywoływana tylko w strumieniach Readable działających w trybie pauzy. W trybie przepływu jest wywoływany automatycznie, readable.read() aż wewnętrzny bufor zostanie całkowicie opróżniony.

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

Każde wywołanie zwraca readable.read() fragment danych, czyli null. Fragmenty nie są połączone. Pętla jest konieczna, aby zużyć wszystkie dane obecnie znajdujące while się w buforze. Podczas odczytu dużego pliku .read() może się zwrócić null, po zużyciu całej dotychczas zbuforowanej zawartości, ale wciąż jest więcej danych, które nie są jeszcze buforowane. W takim przypadku nowe 'readable' zdarzenie zostanie wygenerowane, gdy w buforze pojawi się więcej danych. Na koniec 'end' wydarzenie zostanie wyemitowane, gdy nie będzie już więcej danych.

Dlatego aby odczytać całą zawartość pliku z , readablekonieczne jest zebranie fragmentów przez wiele 'readable' zdarzeń:

const chunks = [];

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

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

Strumień Readable w trybie obiektowym zawsze zwraca pojedynczy element z wywołania do readable.read(size), niezależnie od wartości argumentu size .

Jeśli readable.read() metoda zwraca fragment danych, zostanie również wygenerowane zdarzenie 'data' .

Wezwanie do odczytu po 'end' emisji zdarzenia wróci null. Nie pojawi się żaden błąd w czasie działania.

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

Ta metoda wywołuje fn na każdym fragmencie strumienia w kolejności, przekazując mu wynik z obliczeń na poprzednim elemencie. Zwraca obietnicę końcowej wartości redukcji.

Jeśli nie podano wartości początkowej , jako wartość początkową używa się pierwszego fragmentu strumienia. Jeśli strumień jest pusty, obietnica jest odrzucana z TypeError właściwością z ERR_INVALID_ARGS kodem.

Funkcja reduktora iteruje strumień element po elemencie, co oznacza, że nie ma parametru współbieżności ani równoległości. Aby jednocześnie wykonać redukcję, możesz wyodrębnić funkcję asynchroniczną do readable.map metody.

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

Metoda ta readable.resume() powoduje, że wyraźnie wstrzymany Readable strumień wznawia emisję 'data' zdarzeń, przełączając strumień w tryb przepływu.

Metoda ta readable.resume() może być użyta do pełnego wykorzystania danych ze strumienia bez faktycznego przetwarzania tych danych:

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

Metoda nie readable.resume() ma efektu, jeśli istnieje 'readable' słuchacz zdarzeń.

setEncoding(BufferEncoding)

Metoda ta readable.setEncoding() ustawia kodowanie znaków dla danych odczytanych Readable ze strumienia.

Domyślnie nie przypisuje się kodowania, a dane strumieniowe są zwracane jako Buffer obiekty. Ustawienie kodowania powoduje, że dane strumieniowe są zwracane jako ciągi znaków określonych kodów, a nie jako Buffer obiekty. Na przykład wywołanie readable.setEncoding('utf8') powoduje, że dane wyjściowe są interpretowane jako dane UTF-8 i przekazywane jako ciągi znaków. Wywołanie readable.setEncoding('hex') spowoduje zakodowanie danych w formacie szesnastkowego ciągu tekstowego.

Strumień Readable będzie prawidłowo obsługiwał znaki wielobajtowe dostarczane przez strumień, które w przeciwnym razie zostałyby niepoprawnie zdekodowane, gdyby zostały po prostu pobrane ze strumienia jako Buffer obiekty.

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

Ta metoda jest podobna do Array.prototype.some i wywołuje fn na każdym bloku strumienia, aż oczekiwana wartość zwrotu jest ( true lub dowolna wartość prawdziwa). Gdy wywołanie fn na wartości zwrotu chunk awaited jest prawdziwe, strumień zostaje zniszczony, a obietnica spełniona z .true Jeśli żadne z wywołań fn na blokach nie zwraca wartości prawdziwej, obietnica zostaje spełniona przez .false

take(number, Abortable)

Ta metoda zwraca nowy strumień z pierwszymi blokami limitu .

toArray(Abortable)

Ta metoda pozwala łatwo uzyskać zawartość strumienia.

Ponieważ ta metoda odczytuje cały strumień do pamięci, niweluje korzyści płynące ze strumieni. Jest przeznaczony dla interoperacyjności i wygody, a nie jako główny sposób konsumowania strumieni.

toWeb(ReadableStream, ReadableToWebOptions)

Metoda użytkowa do tworzenia sieci ReadableStream z .Readable

unpipe(WritableStream)

Metoda ta readable.unpipe() odłącza strumień wcześniej przymocowany Writable metodą rur.

Jeśli nie destination jest to określone, wszystkie rury są odłączane.

Jeśli jest destination określona, ale nie jest dla niej ustawiona żadna rura, to metoda nic nie robi.

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)

Przechodząc chunk jako null sygnalizuje koniec strumienia (EOF) i zachowuje się tak samo jak readable.push(null), po czym nie można już zapisać żadnych danych. Sygnał EOF jest umieszczany na końcu bufora, a wszystkie zbuforowane dane nadal są wypłukiwane.

Metoda ta readable.unshift() wsuwa fragment danych z powrotem do wewnętrznego bufora. Jest to przydatne w pewnych sytuacjach, gdy strumień jest konsumowany przez kod, który musi "odkonsumować" pewną ilość danych, które optymistycznym wyciągnął ze źródła, aby dane mogły zostać przekazane innej osobie.

Metoda nie stream.unshift(chunk) może być wywołana po 'end' wygenerowaniu zdarzenia, ponieważ w trakcie wykonywania zostanie wygenerowany błąd.

Programiści często korzystający powinni stream.unshift() rozważyć przejście na stream Transform zamiast tego. Zobacz sekcję API for stream implementers , aby uzyskać więcej informacji.

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

W przeciwieństwie do push, nie zakończy stream.unshift(chunk) procesu odczytu przez resetowanie wewnętrznego stanu odczytu strumienia. Może to powodować nieoczekiwane wyniki, jeśli readable.unshift() jest wywołany podczas odczytu (czyli z _read implementacji na niestandardowym strumieniu). Natychmiastowe wywołanie do readable.unshift() wywołania zresetuje stan odczytu odpowiednio, jednak najlepiej unikać wywołań readable.unshift() podczas wykonywania odczytu.

wrap(ReadableStream)

Przed Node.js 0.10 strumienie nie implementowały całego node:stream API modułu w obecnej formie. (Zobacz więcej Compatibility informacji.)

Korzystając ze starszej biblioteki Node.js, która generuje 'data' zdarzenia i ma metodę pauzy działającą wyłącznie doradczo, metoda ta readable.wrap() może być użyta do stworzenia strumienia Readable wykorzystującego stary strumień jako źródło danych.

Rzadko będzie konieczna do użycia readable.wrap() , ale metoda ta została udostępniona jako wygoda do interakcji ze starszymi aplikacjami Node.js i bibliotekami.

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

Metody dziedziczone

eventNames()

Zwraca tablicę z listą zdarzeń, dla których emiter zarejestrował odbiorniki.

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

Zwraca bieżącą wartość maksymalnego odbiornika dla EventEmitter, która jest ustawiona przez emitter.setMaxListeners(n) lub domyślnie ma wartość events.defaultMaxListeners.

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

Domyślnie EventEmitters wyświetli ostrzeżenie, jeśli dla określonego zdarzenia zostanie dodane więcej niż 10 odbiorniki. Jest to przydatna wartość domyślna, która ułatwia znajdowanie przecieków pamięci. Metoda emitter.setMaxListeners() umożliwia zmodyfikowanie limitu dla tego konkretnego wystąpienia EventEmitter. Wartość można ustawić na Infinity (lub 0), aby wskazać nieograniczoną liczbę odbiorników.

Zwraca odwołanie do EventEmitter, aby wywołania mogły być łańcuchowe.

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

Metoda ta Symbol.for('nodejs.rejection') jest wywoływana w przypadku, gdy podczas emisji zdarzenia następuje odrzucenie obietnicy i captureRejections jest włączona na emiterze. Można użyć events.captureRejectionSymbol go zamiast .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.
  }
}

Szczegóły konstruktora

Readable(ReadableOptions<Readable>)

new Readable(options?: ReadableOptions<Readable>)

Parametry

options

ReadableOptions<Readable>

Szczegóły właściwości

closed

Po true'close' emisji jest już wyemitowany.

closed: boolean

Wartość właściwości

boolean

destroyed

To true po readable.destroy() tym, co zostało wezwane.

destroyed: boolean

Wartość właściwości

boolean

errored

Zwraca błąd, jeśli strumień został zniszczony błędem.

errored: null | Error

Wartość właściwości

null | Error

readable

Jest true to, czy bezpiecznie jest wywołać odczyt, co oznacza, że strumień nie został zniszczony ani emitowany 'error' lub 'end'.

readable: boolean

Wartość właściwości

boolean

readableAborted

Zwraca, czy strumień został zniszczony lub wprowadzony błąd przed emisją 'end'.

readableAborted: boolean

Wartość właściwości

boolean

readableDidRead

Zwraca się, czy 'data' został wyemitowany.

readableDidRead: boolean

Wartość właściwości

boolean

readableEncoding

Getter dla własności encoding danego Readable strumienia. Właściwość tę encoding można ustawić za pomocą metody setEncoded .

readableEncoding: null | BufferEncoding

Wartość właściwości

null | BufferEncoding

readableEnded

Staje się true , gdy 'end' wydawane jest zdarzenie.

readableEnded: boolean

Wartość właściwości

boolean

readableFlowing

Ta własność odzwierciedla obecny stan strumienia Readable opisany w sekcji Trzy stany .

readableFlowing: null | boolean

Wartość właściwości

null | boolean

readableHighWaterMark

Zwraca wartość przekazanej podczas highWaterMark tworzenia tego Readable.

readableHighWaterMark: number

Wartość właściwości

number

readableLength

Ta właściwość zawiera liczbę bajtów (lub obiektów) w kolejce gotowych do odczytu. Wartość ta dostarcza danych introspekcyjnych dotyczących statusu .highWaterMark

readableLength: number

Wartość właściwości

number

readableObjectMode

Getter dla własności objectMode danego Readable strumienia.

readableObjectMode: boolean

Wartość właściwości

boolean

Szczegóły metody

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

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) jest równoważne z stream.compose(readable, s).

Ta metoda pozwala również na dostosowanie strumienia AbortSignal , który zniszczy złożony strumień po przerwaniu.

Aby uzyskać więcej informacji, zobacz stream.compose(...streams).

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

Parametry

stream

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

options

Abortable

Zwraca

Duplex

strumień złożony ze strumienia stream.

destroy(Error)

Zniszczyć strumień. Opcjonalnie wyemituj 'error' zdarzenie, a następnie wyemituje zdarzenie 'close' (chyba że emitClose jest ustawione na false). Po tym wywołaniu czytelny strumień zwolni wszelkie wewnętrzne zasoby, a kolejne wezwania push() zostaną zignorowane.

Po destroy() wywołaniu wszelkie kolejne wywołania będą no-op i nie pojawią się żadne kolejne błędy poza , _destroy() które mogą być emitowane jako .'error'

Implementatorzy nie powinni nadpisywać tej metody, lecz zamiast tego implementować readable._destroy().

function destroy(error?: Error): Readable

Parametry

error

Error

Błąd, który zostanie przekazany jako ładunek w zdarzeniu 'error'

Zwraca

drop(number, Abortable)

Ta metoda zwraca nowy strumień z pierwszymi blokami limitu odrzucone od początku.

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

Parametry

limit

number

Liczba fragmentów, które trzeba usunąć z czytelnego.

options

Abortable

Zwraca

strumień z limitem bloków odrzucanych od początku.

emit(string | symbol, any[])

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

Parametry

eventName

string | symbol

args

any[]

Zwraca

boolean

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

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

Parametry

eventName

E

args

ReadableEventMap[E]

Zwraca

boolean

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

Ta metoda jest podobna do Array.prototype.every i wywołuje fn na każdym chunku w strumieniu, aby sprawdzić, czy wszystkie oczekiwane wartości zwrotne są prawdziwe dla fn. Gdy wywołanie fn na wartości zwrotu bloku awaitjest fałszywe, strumień zostaje zniszczony, a obietnica spełniona przez false. Jeśli wszystkie wywołania fn na blokach zwracają wartość prawdziwą, obietnica jest spełniona przez true.

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

Parametry

fn

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

funkcja wywołująca każdy fragment strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

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

Zwraca

Promise<boolean>

Obietnica oceniająca na , true czy fn zwraca prawdziwą wartość dla każdego z bloków.

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

Ta metoda pozwala na filtrowanie strumienia. Dla każdego fragmentu strumienia wywołana zostanie funkcja fn i jeśli zwróci wartość prawdziwą, fragment zostanie przekazany do strumienia wyniku. Jeśli funkcja fn zwraca obietnicę – ta obietnica będzie ed await.

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

Parametry

fn

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

funkcja filtrująca fragmenty strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

ReadableOperatorOptions

Zwraca

strumień filtrowany predykatem 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>

Parametry

fn

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

options

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

Zwraca

Promise<any>

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

Ta metoda jest podobna do Array.prototype.find i wywołuje fn na każdym chunku w strumieniu, aby znaleźć chunk z prawdziwą wartością fn. Gdy oczekiwana wartość zwrotu wywołania fn jest prawdziwa, strumień zostaje zniszczony, a obietnica spełniona z wartością, dla której fn zwrócił wartość prawdziwą. Jeśli wszystkie wywołania fn na blokach zwracają fałszywą wartość, obietnica jest spełniona przez undefined.

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

Parametry

fn

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

funkcja wywołująca każdy fragment strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

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

Zwraca

Promise<undefined | T>

Obietnica wyliczająca się do pierwszego fragmentu, dla którego fn ocenił wartość prawdziwą, lub undefined jeśli nie znaleziono żadnego elementu.

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

Ta metoda zwraca nowy strumień poprzez zastosowanie danego callbacku do każdego fragmentu strumienia, a następnie spłaszczenie wyniku.

Możliwe jest zwrócenie strumienia lub innego iterowalnego lub asynchronicznego iterowalnego z fn i strumienie wynikowe zostaną połączone (spłaszczone) z zwróconym strumieniem.

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

Parametry

fn

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

funkcja mapująca na każdy fragment strumienia. Może być asynchroniczna. Może to strumień lub generator.

options

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

Zwraca

strumień płaski odwzorowany funkcją fn.

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

Ta metoda pozwala na iterację strumienia. Dla każdego chunku w strumieniu wywołana zostanie funkcja fn . Jeśli funkcja fn zwraca obietnicę – ta obietnica będzie ed await.

Ta metoda różni się od for await...of pętli tym, że opcjonalnie może przetwarzać fragmenty równocześnie. Ponadto iterację forEach można zatrzymać tylko po przejściu opcji signal i przerwaniu powiązanego AbortControllera, podczas gdy for await...of można ją zatrzymać za break pomocą lub return. W obu przypadkach strumień zostanie zniszczony.

Ta metoda różni się od odsłuchu 'data' zdarzenia tym, że wykorzystuje zdarzenie readable w maszynie podstawowej i może ograniczyć liczbę jednoczesnych wywołań fn .

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

Parametry

fn

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

funkcja wywołująca każdy fragment strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

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

Zwraca

Promise<void>

Obietnica na zakończenie streamu.

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

Metoda pomocnicza do tworzenia czytelnych strumieni z iteratorów.

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

Parametry

iterable

Iterable<any> | AsyncIterable<any>

Obiekt implementujący Symbol.asyncIteratorSymbol.iterator lub iterowalny protokół. Generuje zdarzenie "błąd", jeśli zostanie przekazana wartość nulla.

options

ReadableOptions<Readable>

Opcje udostępnione dla new stream.Readable([options]). Domyślnie ustawimy Readable.from()options.objectMode na , truechyba że zostanie to wyraźnie wyłączone przez ustawienie options.objectMode na false.

Zwraca

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

Metoda pomocnicza do tworzenia z Readable sieci ReadableStream.

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

Parametry

readableStream

ReadableStream<any>

options

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

Zwraca

isDisturbed(ReadableStream<any> | ReadableStream)

Zwraca się, niezależnie od tego, czy strumień został odczytany, czy anulowany.

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

Parametry

stream

ReadableStream<any> | ReadableStream

Zwraca

boolean

isPaused()

Metoda readable.isPaused() zwraca aktualny stan pracy .Readable Jest to wykorzystywane głównie przez mechanizm, który leży u podstaw tej metody readable.pipe() . W większości typowych przypadków nie ma powodu, by stosować tę metodę bezpośrednio.

const readable = new stream.Readable();

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

Zwraca

boolean

iterator(ReadableIteratorOptions)

Iterator utworzony tą metodą daje użytkownikom możliwość anulowania zniszczenia strumienia, jeśli pętla for await...of zostanie zakończona przez return, break, lub throw, lub jeśli iterator zniszczy strumień w przypadku błędu podczas iteracji.

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

Parametry

options

ReadableIteratorOptions

Zwraca

AsyncIterator<any, undefined, any>

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

number

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

number

listeners(string | symbol)

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

Parametry

eventName

string | symbol

Zwraca

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

listeners<E>(E)

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

Parametry

eventName

E

Zwraca

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

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

Ta metoda pozwala na mapowanie strumienia. Funkcja fn będzie wywoływana dla każdego chunku w strumieniu. Jeśli funkcja fn zwraca obietnicę – ta obietnica zostanie ed awaitprzed przekazaniem do strumienia wyników.

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

Parametry

fn

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

funkcja mapująca na każdy fragment strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

ReadableOperatorOptions

Zwraca

strumień mapowany funkcją fn.

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

pause()

Metoda ta readable.pause() powoduje, że strumień w trybie przepływu przestaje emitować 'data' zdarzenia, przełączając się z trybu przepływu. Wszelkie dostępne dane pozostaną w buforze wewnętrznym.

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

Metoda nie readable.pause() ma efektu, jeśli istnieje 'readable' słuchacz zdarzeń.

function pause(): Readable

Zwraca

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

push(any, BufferEncoding)

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

Parametry

chunk

any

encoding

BufferEncoding

Zwraca

boolean

rawListeners(string | symbol)

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

Parametry

eventName

string | symbol

Zwraca

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

rawListeners<E>(E)

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

Parametry

eventName

E

Zwraca

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

read(number)

Metoda readable.read() odczytuje dane z wewnętrznego bufora i zwraca je. Jeśli nie ma dostępnych danych do odczytu, null zwraca się. Domyślnie dane są zwracane jako obiekt, Buffer chyba że kodowanie zostało określone metodą readable.setEncoding() lub strumień działa w trybie obiektowym.

Argument opcjonalny size określa określoną liczbę bajtów do odczytu. Jeśli size bajty nie są dostępne do odczytu, zostaną zwrócone, nullchyba że strumień się zakończył, wtedy wszystkie dane pozostały w buforze wewnętrznym zostaną zwrócone.

Jeśli size argument nie zostanie określony, wszystkie dane zawarte w wewnętrznym buforze zostaną zwrócone.

Argument size musi być mniejszy lub równy 1 GiB.

Metoda powinna readable.read() być wywoływana tylko w strumieniach Readable działających w trybie pauzy. W trybie przepływu jest wywoływany automatycznie, readable.read() aż wewnętrzny bufor zostanie całkowicie opróżniony.

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

Każde wywołanie zwraca readable.read() fragment danych, czyli null. Fragmenty nie są połączone. Pętla jest konieczna, aby zużyć wszystkie dane obecnie znajdujące while się w buforze. Podczas odczytu dużego pliku .read() może się zwrócić null, po zużyciu całej dotychczas zbuforowanej zawartości, ale wciąż jest więcej danych, które nie są jeszcze buforowane. W takim przypadku nowe 'readable' zdarzenie zostanie wygenerowane, gdy w buforze pojawi się więcej danych. Na koniec 'end' wydarzenie zostanie wyemitowane, gdy nie będzie już więcej danych.

Dlatego aby odczytać całą zawartość pliku z , readablekonieczne jest zebranie fragmentów przez wiele 'readable' zdarzeń:

const chunks = [];

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

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

Strumień Readable w trybie obiektowym zawsze zwraca pojedynczy element z wywołania do readable.read(size), niezależnie od wartości argumentu size .

Jeśli readable.read() metoda zwraca fragment danych, zostanie również wygenerowane zdarzenie 'data' .

Wezwanie do odczytu po 'end' emisji zdarzenia wróci null. Nie pojawi się żaden błąd w czasie działania.

function read(size?: number): any

Parametry

size

number

Opcjonalny argument określający, ile danych należy odczytać.

Zwraca

any

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

Ta metoda wywołuje fn na każdym fragmencie strumienia w kolejności, przekazując mu wynik z obliczeń na poprzednim elemencie. Zwraca obietnicę końcowej wartości redukcji.

Jeśli nie podano wartości początkowej , jako wartość początkową używa się pierwszego fragmentu strumienia. Jeśli strumień jest pusty, obietnica jest odrzucana z TypeError właściwością z ERR_INVALID_ARGS kodem.

Funkcja reduktora iteruje strumień element po elemencie, co oznacza, że nie ma parametru współbieżności ani równoległości. Aby jednocześnie wykonać redukcję, możesz wyodrębnić funkcję asynchroniczną do readable.map metody.

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

Parametry

fn

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

funkcja redukująca do wywoływania każdego chunku w strumieniu. Niezależnie od tego, czy to asynchronicznie, czy nie.

Zwraca

Promise<T>

obietnica ostatecznej wartości redukcji.

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>

Parametry

fn

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

initial

T

options

Abortable

Zwraca

Promise<T>

removeAllListeners(string | symbol)

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

Parametry

eventName

string | symbol

Zwraca

removeAllListeners<E>(E)

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

Parametry

eventName

E

Zwraca

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

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

Parametry

eventName

string | symbol

listener

(args: any[]) => void

Zwraca

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

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

Parametry

eventName

E

listener

(args: ReadableEventMap[E]) => void

Zwraca

resume()

Metoda ta readable.resume() powoduje, że wyraźnie wstrzymany Readable strumień wznawia emisję 'data' zdarzeń, przełączając strumień w tryb przepływu.

Metoda ta readable.resume() może być użyta do pełnego wykorzystania danych ze strumienia bez faktycznego przetwarzania tych danych:

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

Metoda nie readable.resume() ma efektu, jeśli istnieje 'readable' słuchacz zdarzeń.

function resume(): Readable

Zwraca

setEncoding(BufferEncoding)

Metoda ta readable.setEncoding() ustawia kodowanie znaków dla danych odczytanych Readable ze strumienia.

Domyślnie nie przypisuje się kodowania, a dane strumieniowe są zwracane jako Buffer obiekty. Ustawienie kodowania powoduje, że dane strumieniowe są zwracane jako ciągi znaków określonych kodów, a nie jako Buffer obiekty. Na przykład wywołanie readable.setEncoding('utf8') powoduje, że dane wyjściowe są interpretowane jako dane UTF-8 i przekazywane jako ciągi znaków. Wywołanie readable.setEncoding('hex') spowoduje zakodowanie danych w formacie szesnastkowego ciągu tekstowego.

Strumień Readable będzie prawidłowo obsługiwał znaki wielobajtowe dostarczane przez strumień, które w przeciwnym razie zostałyby niepoprawnie zdekodowane, gdyby zostały po prostu pobrane ze strumienia jako Buffer obiekty.

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

Parametry

encoding

BufferEncoding

Kodowanie do użycia.

Zwraca

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

Ta metoda jest podobna do Array.prototype.some i wywołuje fn na każdym bloku strumienia, aż oczekiwana wartość zwrotu jest ( true lub dowolna wartość prawdziwa). Gdy wywołanie fn na wartości zwrotu chunk awaited jest prawdziwe, strumień zostaje zniszczony, a obietnica spełniona z .true Jeśli żadne z wywołań fn na blokach nie zwraca wartości prawdziwej, obietnica zostaje spełniona przez .false

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

Parametry

fn

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

funkcja wywołująca każdy fragment strumienia. Niezależnie od tego, czy to asynchronicznie, czy nie.

options

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

Zwraca

Promise<boolean>

Obietnica oceniająca na , true jeśli fn zwraca wartość prawdziwą przynajmniej dla jednego z chunków.

take(number, Abortable)

Ta metoda zwraca nowy strumień z pierwszymi blokami limitu .

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

Parametry

limit

number

Liczba fragmentów do pobrania z czytelnego.

options

Abortable

Zwraca

stream z limitem chunków.

toArray(Abortable)

Ta metoda pozwala łatwo uzyskać zawartość strumienia.

Ponieważ ta metoda odczytuje cały strumień do pamięci, niweluje korzyści płynące ze strumieni. Jest przeznaczony dla interoperacyjności i wygody, a nie jako główny sposób konsumowania strumieni.

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

Parametry

options

Abortable

Zwraca

Promise<any[]>

obietnica zawierająca tablicę z zawartością strumienia.

toWeb(ReadableStream, ReadableToWebOptions)

Metoda użytkowa do tworzenia sieci ReadableStream z .Readable

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

Parametry

streamReadable

ReadableStream

options

ReadableToWebOptions

Zwraca

ReadableStream<any>

unpipe(WritableStream)

Metoda ta readable.unpipe() odłącza strumień wcześniej przymocowany Writable metodą rur.

Jeśli nie destination jest to określone, wszystkie rury są odłączane.

Jeśli jest destination określona, ale nie jest dla niej ustawiona żadna rura, to metoda nic nie robi.

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

Parametry

destination

WritableStream

Opcjonalny strumień specyficzny do odpięcia

Zwraca

unshift(any, BufferEncoding)

Przechodząc chunk jako null sygnalizuje koniec strumienia (EOF) i zachowuje się tak samo jak readable.push(null), po czym nie można już zapisać żadnych danych. Sygnał EOF jest umieszczany na końcu bufora, a wszystkie zbuforowane dane nadal są wypłukiwane.

Metoda ta readable.unshift() wsuwa fragment danych z powrotem do wewnętrznego bufora. Jest to przydatne w pewnych sytuacjach, gdy strumień jest konsumowany przez kod, który musi "odkonsumować" pewną ilość danych, które optymistycznym wyciągnął ze źródła, aby dane mogły zostać przekazane innej osobie.

Metoda nie stream.unshift(chunk) może być wywołana po 'end' wygenerowaniu zdarzenia, ponieważ w trakcie wykonywania zostanie wygenerowany błąd.

Programiści często korzystający powinni stream.unshift() rozważyć przejście na stream Transform zamiast tego. Zobacz sekcję API for stream implementers , aby uzyskać więcej informacji.

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

W przeciwieństwie do push, nie zakończy stream.unshift(chunk) procesu odczytu przez resetowanie wewnętrznego stanu odczytu strumienia. Może to powodować nieoczekiwane wyniki, jeśli readable.unshift() jest wywołany podczas odczytu (czyli z _read implementacji na niestandardowym strumieniu). Natychmiastowe wywołanie do readable.unshift() wywołania zresetuje stan odczytu odpowiednio, jednak najlepiej unikać wywołań readable.unshift() podczas wykonywania odczytu.

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

Parametry

chunk

any

Fragment danych do przesunięcia do kolejki odczytu. Dla strumieni niedziałających w trybie obiektowym, chunk musi być {string}, {Buffer}, {TypedArray}, {DataView} lub null. Dla strumieni w trybie obiektowym może to chunk być dowolna wartość JavaScript.

encoding

BufferEncoding

Kodowanie fragmentów znaków znaków. Musi być poprawnym kodowaniem Buffer , takim jak 'utf8' lub 'ascii'.

wrap(ReadableStream)

Przed Node.js 0.10 strumienie nie implementowały całego node:stream API modułu w obecnej formie. (Zobacz więcej Compatibility informacji.)

Korzystając ze starszej biblioteki Node.js, która generuje 'data' zdarzenia i ma metodę pauzy działającą wyłącznie doradczo, metoda ta readable.wrap() może być użyta do stworzenia strumienia Readable wykorzystującego stary strumień jako źródło danych.

Rzadko będzie konieczna do użycia readable.wrap() , ale metoda ta została udostępniona jako wygoda do interakcji ze starszymi aplikacjami Node.js i bibliotekami.

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

Parametry

stream

ReadableStream

"Stary styl" czytelny strumień

Zwraca

[asyncIterator]()

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

Zwraca

AsyncIterator<any, undefined, any>

AsyncIterator by w pełni pochłonąć strumień strumienia.

Szczegóły metody dziedziczonej

eventNames()

Zwraca tablicę z listą zdarzeń, dla których emiter zarejestrował odbiorniki.

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

Zwraca

(string | symbol)[]

Dziedziczone od Stream.eventNames

getMaxListeners()

Zwraca bieżącą wartość maksymalnego odbiornika dla EventEmitter, która jest ustawiona przez emitter.setMaxListeners(n) lub domyślnie ma wartość events.defaultMaxListeners.

function getMaxListeners(): number

Zwraca

number

Dziedziczone od Stream.getMaxListeners

pipe<T>(T, PipeOptions)

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

Parametry

destination

T

options

PipeOptions

Zwraca

T

Dziedziczone od Stream.pipe

setMaxListeners(number)

Domyślnie EventEmitters wyświetli ostrzeżenie, jeśli dla określonego zdarzenia zostanie dodane więcej niż 10 odbiorniki. Jest to przydatna wartość domyślna, która ułatwia znajdowanie przecieków pamięci. Metoda emitter.setMaxListeners() umożliwia zmodyfikowanie limitu dla tego konkretnego wystąpienia EventEmitter. Wartość można ustawić na Infinity (lub 0), aby wskazać nieograniczoną liczbę odbiorników.

Zwraca odwołanie do EventEmitter, aby wywołania mogły być łańcuchowe.

function setMaxListeners(n: number): Readable

Parametry

n

number

Zwraca

Dziedziczone od Stream.setMaxListeners

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

Metoda ta Symbol.for('nodejs.rejection') jest wywoływana w przypadku, gdy podczas emisji zdarzenia następuje odrzucenie obietnicy i captureRejections jest włączona na emiterze. Można użyć events.captureRejectionSymbol go zamiast .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[])

Parametry

error

Error

event

string | symbol

args

any[]

Dziedziczone od Stream.__@captureRejectionSymbol@175