Readable class

Extends

Stream

Eigenschaften

closed

Es ist true danach 'close' ausgestrahlt worden.

destroyed

Es ist true danach readable.destroy() aufgerufen worden.

errored

Gibt einen Fehler zurück, wenn der Strom mit einem Fehler zerstört wurde.

readable

Ist true , wenn es sicher ist, gelesen zu rufen, was bedeutet, dass der Strom nicht zerstört oder ausgesandt 'error' wurde oder 'end'.

readableAborted

Gibt zurück, ob der Strom vor der Aussendung 'end'zerstört oder fehlerhaft war.

readableDidRead

Es wird bestätigt, ob 'data' ausgesandt wurde.

readableEncoding

Getter für die Eigenschaft encoding eines gegebenen Readable Stroms. Die Eigenschaft encoding kann mit der setEncoding-Methode gesetzt werden.

readableEnded

Es wird zu true dem Zeitpunkt, in dem 'end' ein Ereignis ausgestrahlt wird.

readableFlowing

Diese Eigenschaft spiegelt den aktuellen Zustand eines Readable Baches wider, wie im Abschnitt " Drei Zustände " beschrieben.

readableHighWaterMark

Gibt beim Erstellen dieses zurück Readableden Wert von highWaterMark gegeben.

readableLength

Diese Eigenschaft enthält die Anzahl der Bytes (oder Objekte) in der Warteschlange, die zum Lesen bereit sind. Der Wert liefert Introspektionsdaten zum Status der highWaterMark.

readableObjectMode

Getter für die Eigenschaft objectMode eines gegebenen Readable Stroms.

Methoden

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

Mit diesem Verfahren kann auch ein bereitgestellt werden AbortSignal , was den komponierten Strom beim Abbruch zerstört.

Weitere Informationen finden Sie unter stream.compose(...streams).

destroy(Error)

Zerstören Sie den Strom. Optional kann ein 'error' Event ausgesendet werden, und ein 'close' Event ausgesendet werden (sofern emitClose nicht auf gesetzt ist false). Nach diesem Aufruf gibt der lesbare Stream alle internen Ressourcen frei und nachfolgende Aufrufe push() werden ignoriert.

Sobald destroy() aufgerufen wurde, werden weitere Anrufe ein no-op und keine weiteren Fehler außer von _destroy() können als 'error'ausgesendet werden.

Implementatoren sollten diese Methode nicht überschreiben, sondern stattdessen implementieren readable._destroy().

drop(number, Abortable)

Diese Methode liefert einen neuen Stream zurück, bei dem die ersten Limit-Chunks von Anfang an weggelassen wurden.

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

Diese Methode ähnelt und Array.prototype.every ruft fn auf jedem Chunk im Strom auf, um zu prüfen, ob alle wartenden Rückgabewerte wahrheitswürdige Werte für fn sind. Sobald ein fn-Call auf einem Chunked-Rückgabewert awaitfalsch ist, wird der Strom zerstört und das Versprechen mit falseerfüllt. Wenn alle fn-Aufrufe auf den Chunks einen wahrheitswerten Wert zurückgeben, wird das Versprechen mit trueerfüllt.

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

Diese Methode ermöglicht das Filtern des Stroms. Für jeden Chunk im Strom wird die fn-Funktion aufgerufen, und wenn sie einen truthy-Wert zurückgibt, wird der Chunk an den Ergebnisstrom weitergegeben. Wenn die fn-Funktion ein Versprechen zurückgibt – dann ist awaitdieses Versprechen ed.

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

Diese Methode ähnelt und Array.prototype.find ruft auf jedem Chunk im Stream fn auf, um einen Chunk mit einem Truthy-Wert für fn zu finden. Sobald der erwartete Rückgabewert eines Fn-Calls Truthy ist, wird der Stream zerstört und das Versprechen mit einem Wert erfüllt, für den Fn einen Truthy-Wert zurückgegeben hat. Wenn alle fn-Aufrufe auf den Chunks einen falschen Wert zurückgeben, wird das Versprechen mit undefinederfüllt.

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

Diese Methode gibt einen neuen Stream zurück, indem der gegebene Callback auf jeden Block des Streams angewendet und das Ergebnis abgeflacht wird.

Es ist möglich, einen Strom oder einen anderen iterablen oder asynchronen Iterablen von fn zurückzugeben, und die resultierenden Ströme werden in den zurückgesendeten Strom eingegliedert (abgeflacht).

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

Diese Methode ermöglicht das Iterieren eines Stroms. Für jeden Chunk im Strom wird die fn-Funktion aufgerufen. Wenn die fn-Funktion ein Versprechen zurückgibt – dann ist awaitdieses Versprechen ed.

Diese Methode unterscheidet sich von for await...of Schleifen dadurch, dass sie optional Chunks gleichzeitig verarbeiten kann. Außerdem kann eine forEach Iteration nur gestoppt werden, indem eine signal Option bestanden und der zugehörige AbortController abgebrochen wird, während for await...of mit oder returngestoppt break werden kann. In beiden Fällen wird der Strom zerstört.

Diese Methode unterscheidet sich vom Abhören des Ereignisses 'data' dadurch, dass sie das readable Ereignis in der zugrunde liegenden Maschine verwendet und die Anzahl gleichzeitiger FN-Aufrufe begrenzen kann.

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

Eine Utility-Methode zur Erstellung lesbarer Streams aus Iteratoren.

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

Eine Utility-Methode zur Erstellung eines Readable aus einem Web ReadableStream.

isDisturbed(ReadableStream<any> | ReadableStream)

Kehrt zurück, egal ob der Stream gelesen oder abgebrochen wurde.

isPaused()

Die Methode readable.isPaused() liefert den aktuellen Betriebszustand der Readable. Dies wird hauptsächlich vom Mechanismus genutzt, der der Methode readable.pipe() zugrunde liegt. In den meisten typischen Fällen gibt es keinen Grund, diese Methode direkt anzuwenden.

const readable = new stream.Readable();

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

Der durch diese Methode erstellte Iterator gibt den Nutzern die Möglichkeit, die Zerstörung des Stroms abzubrechen, wenn die Schleife for await...of von return, break, oder throw, beendet wird, oder wenn der Iterator den Strom zerstören sollte, wenn der Strom während der Iteration einen Fehler ausstrahlt.

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)

Diese Methode erlaubt die Abbildung des Stroms. Die fn-Funktion wird für jeden Chunk im Strom aufgerufen. Wenn die fn-Funktion ein Versprechen zurückgibt, wird dieses Versprechen ed sein await, bevor es an den Ergebnisstrom weitergegeben wird.

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

Die Methode readable.pause() bewirkt, dass ein Strom im Fließmodus aufhört, Ereignisse auszusenden 'data' , und aus dem Fließmodus wechselt. Alle verfügbaren Daten bleiben im internen Puffer.

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

Die Methode readable.pause() hat keine Wirkung, wenn es einen 'readable' Ereignis-Listener gibt.

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)

Die Methode readable.read() liest Daten aus dem internen Puffer und gibt sie zurück. Wenn keine Daten zum Lesen verfügbar sind, null wird sie zurückgegeben. Standardmäßig werden die Daten als Buffer Objekt zurückgegeben, es sei denn, eine Codierung wurde mit der Methode readable.setEncoding() angegeben oder der Strom arbeitet im Objektmodus.

Das optionale size Argument gibt eine bestimmte Anzahl von Bytes an, die gelesen werden sollen. Wenn size keine Bytes zum Lesen verfügbar sind, null werden sie zurückgegeben, es sei denn , der Strom ist beendet, in diesem Fall werden alle im internen Puffer verbleibenden Daten zurückgegeben.

Wenn das Argument size nicht angegeben ist, werden alle im internen Puffer enthaltenen Daten zurückgegeben.

Das Argument size muss kleiner als oder gleich 1 GiB sein.

Die Methode readable.read() sollte nur bei Readable Strömen aufgerufen werden, die im Pause-Modus arbeiten. Im Fließmodus wird automatisch aufgerufen, readable.read() bis der interne Puffer vollständig entleert ist.

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

Jeder Aufruf zu readable.read() gibt einen Datenblock zurück, oder null. Die Chunks sind nicht verkettet. Eine Schleife while ist notwendig, um alle Daten im Puffer zu konsumieren. Beim Lesen kann eine große Datei .read() zurückkommen null, wobei alle bisher gepufferten Inhalte verbraucht wurden, aber es gibt noch weitere Daten, die noch nicht gepuffert sind. In diesem Fall wird ein neues 'readable' Ereignis ausgesendet, wenn sich mehr Daten im Puffer befinden. Schließlich wird das 'end' Ereignis ausgesendet, wenn keine weiteren Daten mehr verfügbar sind.

Daher ist es notwendig, um den gesamten Inhalt einer Datei aus einem zu lesen readable, Chunks über mehrere 'readable' Ereignisse hinweg zu sammeln:

const chunks = [];

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

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

Ein Readable Stream im Objektmodus gibt immer ein einzelnes Element aus einem Aufruf zu readable.read(size)zurück, unabhängig vom Wert des Arguments size .

Wenn die Methode readable.read() einen Datenblock zurückgibt, wird auch ein Ereignis 'data' ausgesendet.

Rufen nach der Ausstrahlung des Ereignisses 'end' werden zurückgerufen null. Es wird kein Laufzeitfehler angezeigt.

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

Diese Methode ruft fn auf jedem Abschnitt des Stroms in der Reihenfolge auf und übermittelt ihm das Ergebnis aus der Berechnung des vorherigen Elements. Es gibt ein Versprechen für den Endwert der Reduktion zurück.

Wird kein Anfangswert angegeben, wird das erste Stück des Stroms als Anfangswert verwendet. Ist der Strom leer, wird das Versprechen mit einer TypeError mit der ERR_INVALID_ARGS Code-Eigenschaft abgelehnt.

Die Reduzierfunktion iteriert den Strom Element für Element, was bedeutet, dass es keinen Nebenläufigkeitsparameter oder Parallelität gibt. Um gleichzeitig eine Reduktion durchzuführen, kann man die asynchrone Funktion in die readable.map Methode extrahieren.

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

Die Methode readable.resume() bewirkt, dass ein explizit pausierter Readable Strom wieder Ereignisse 'data' aussendet, wodurch der Strom in den Flussmodus wechselt.

Die Methode readable.resume() kann verwendet werden, um die Daten aus einem Strom vollständig zu konsumieren, ohne diese Daten tatsächlich zu verarbeiten:

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

Die Methode readable.resume() hat keine Wirkung, wenn es einen 'readable' Ereignis-Listener gibt.

setEncoding(BufferEncoding)

Die Methode readable.setEncoding() legt die Zeichenkodierung für die aus dem Strom Readable gelesenen Daten fest.

Standardmäßig wird keine Codierung zugewiesen und Stromdaten werden als Buffer Objekte zurückgegeben. Das Setzen einer Codierung führt dazu, dass die Stromdaten als Strings der angegebenen Codierung und nicht als Buffer Objekte zurückgegeben werden. Zum Beispiel führt ein Aufruf readable.setEncoding('utf8') dazu, dass die Ausgabedaten als UTF-8-Daten interpretiert und als Zeichenketten übermittelt werden. Ein Aufruf readable.setEncoding('hex') führt dazu, dass die Daten im hexadezimalen String-Format codiert werden.

Der Strom Readable verarbeitet korrekt Multibyte-Zeichen, die durch den Strom geliefert werden und sonst falsch decodiert würden, wenn sie einfach als Objekte aus dem Strom Buffer gezogen würden.

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

Diese Methode ist ähnlich wie Array.prototype.some und ruft fn auf jedem Chunk im Strom auf, bis der erwartete Rückgabewert (oder ein Truthy-Wert) erreicht ist true . Sobald ein FN-Call auf einen Chunk awaitEd-Rückgabewert wahrheitsgemäß ist, wird der Stream zerstört und das Versprechen mit trueerfüllt. Wenn keiner der fn-Aufrufe auf die Chunks einen wahrheitlichen Wert zurückgibt, wird das Versprechen mit falseerfüllt.

take(number, Abortable)

Diese Methode gibt einen neuen Strom mit den ersten Limit-Chunks zurück.

toArray(Abortable)

Diese Methode ermöglicht es einfach, den Inhalt eines Stroms zu erhalten.

Da diese Methode den gesamten Strom in den Speicher liest, werden die Vorteile von Strömen aufgehoben. Es ist für Interoperabilität und Bequemlichkeit gedacht, nicht als primäre Methode, Streams zu konsumieren.

toWeb(ReadableStream, ReadableToWebOptions)

Eine Utility-Methode zur Erstellung eines Webs ReadableStream aus einem Readable.

unpipe(WritableStream)

Die Methode readable.unpipe() trennt einen Writable zuvor angelegten Strahl mittels Rohrmethode .

Wenn das nicht destination angegeben ist, werden alle Rohre abgetrennt.

Wenn das destination angegeben ist, aber kein Rohr dafür eingerichtet ist, bewirkt die Methode nichts.

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)

Das Senden chunk als null Signale das Ende des Stroms (EOF) und verhält sich gleich wie readable.push(null), woraufhin keine weiteren Daten mehr geschrieben werden können. Das EOF-Signal wird ans Ende des Puffers gelegt und alle gepufferten Daten werden weiterhin entfernt.

Die Methode readable.unshift() drückt einen Datenblock zurück in den internen Puffer. Dies ist nützlich in bestimmten Situationen, in denen ein Strom von Code verbraucht wird, der eine bestimmte Menge an Daten "entverbrauchen" muss, die er optimistisch aus der Quelle gezogen hat, damit die Daten an eine andere Partei weitergegeben werden können.

Die Methode stream.unshift(chunk) kann nicht aufgerufen werden, nachdem das Ereignis 'end' ausgesendet wurde, sonst wird ein Laufzeitfehler ausgelöst.

Entwickler, die häufig nutzen stream.unshift() , sollten stattdessen in Erwägung ziehen, auf einen Transform Stream umzusteigen. Siehe den Abschnitt API for stream implementers für weitere Informationen.

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

Im Gegensatz zu Push wird der Leseprozess nicht durch das Zurücksetzen des internen Lesezustands des Streams stream.unshift(chunk) beendet. Dies kann unerwartete Ergebnisse verursachen, wenn readable.unshift() er während eines Lesens (d. h. aus einer _read Implementierung auf einem benutzerdefinierten Stream ) aufgerufen wird. Das Folgen des Aufrufs mit readable.unshift() einem sofortigen Push setzt den Lesezustand entsprechend zurück, es ist jedoch am besten, während des Lesens einen Anruf readable.unshift() zu vermeiden.

wrap(ReadableStream)

Vor Node.js 0.10 implementierten Streams nicht die gesamte node:stream Modul-API, wie sie derzeit definiert ist. (Siehe Compatibility für weitere Informationen.)

Wenn eine ältere Node.js-Bibliothek verwendet wird, die Ereignisse ausgibt 'data' und eine rein beratende Pausenmethode besitzt, kann diese readable.wrap() Methode verwendet werden, um einen Readable Strom zu erstellen, der den alten Strom als Datenquelle nutzt.

Sie wird selten notwendig readable.wrap() sein, aber die Methode wurde als Komfort für die Interaktion mit älteren Node.js-Anwendungen und Bibliotheken bereitgestellt.

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

Geerbte Methoden

eventNames()

Gibt ein Array zurück, das die Ereignisse auflistet, für die der Emitter Listener registriert hat.

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

Gibt den aktuellen Maximallistenerwert für die EventEmitter zurück, die entweder durch emitter.setMaxListeners(n) oder standardmäßig auf events.defaultMaxListenersfestgelegt ist.

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

Standardmäßig druckt EventEmitters eine Warnung, wenn für ein bestimmtes Ereignis mehr als 10 Listener hinzugefügt werden. Dies ist ein nützlicher Standardwert, der hilft, Speicherverluste zu finden. Mit der emitter.setMaxListeners()-Methode kann der Grenzwert für diese spezifische EventEmitter Instanz geändert werden. Der Wert kann auf Infinity (oder 0) festgelegt werden, um eine unbegrenzte Anzahl von Listenern anzugeben.

Gibt einen Verweis auf die EventEmitterzurück, sodass Aufrufe verkettet werden können.

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

Die Methode Symbol.for('nodejs.rejection') wird aufgerufen, wenn eine Versprechensablehnung beim Aussenden eines Ereignisses auftritt und captureRejections auf dem Emitter aktiviert ist. Es ist möglich, anstelle von events.captureRejectionSymbolzu verwendenSymbol.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.
  }
}

Details zum Konstruktor

Readable(ReadableOptions<Readable>)

new Readable(options?: ReadableOptions<Readable>)

Parameter

options

ReadableOptions<Readable>

Details zur Eigenschaft

closed

Es ist true danach 'close' ausgestrahlt worden.

closed: boolean

Eigenschaftswert

boolean

destroyed

Es ist true danach readable.destroy() aufgerufen worden.

destroyed: boolean

Eigenschaftswert

boolean

errored

Gibt einen Fehler zurück, wenn der Strom mit einem Fehler zerstört wurde.

errored: null | Error

Eigenschaftswert

null | Error

readable

Ist true , wenn es sicher ist, gelesen zu rufen, was bedeutet, dass der Strom nicht zerstört oder ausgesandt 'error' wurde oder 'end'.

readable: boolean

Eigenschaftswert

boolean

readableAborted

Gibt zurück, ob der Strom vor der Aussendung 'end'zerstört oder fehlerhaft war.

readableAborted: boolean

Eigenschaftswert

boolean

readableDidRead

Es wird bestätigt, ob 'data' ausgesandt wurde.

readableDidRead: boolean

Eigenschaftswert

boolean

readableEncoding

Getter für die Eigenschaft encoding eines gegebenen Readable Stroms. Die Eigenschaft encoding kann mit der setEncoding-Methode gesetzt werden.

readableEncoding: null | BufferEncoding

Eigenschaftswert

null | BufferEncoding

readableEnded

Es wird zu true dem Zeitpunkt, in dem 'end' ein Ereignis ausgestrahlt wird.

readableEnded: boolean

Eigenschaftswert

boolean

readableFlowing

Diese Eigenschaft spiegelt den aktuellen Zustand eines Readable Baches wider, wie im Abschnitt " Drei Zustände " beschrieben.

readableFlowing: null | boolean

Eigenschaftswert

null | boolean

readableHighWaterMark

Gibt beim Erstellen dieses zurück Readableden Wert von highWaterMark gegeben.

readableHighWaterMark: number

Eigenschaftswert

number

readableLength

Diese Eigenschaft enthält die Anzahl der Bytes (oder Objekte) in der Warteschlange, die zum Lesen bereit sind. Der Wert liefert Introspektionsdaten zum Status der highWaterMark.

readableLength: number

Eigenschaftswert

number

readableObjectMode

Getter für die Eigenschaft objectMode eines gegebenen Readable Stroms.

readableObjectMode: boolean

Eigenschaftswert

boolean

Details zur Methode

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

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

Mit diesem Verfahren kann auch ein bereitgestellt werden AbortSignal , was den komponierten Strom beim Abbruch zerstört.

Weitere Informationen finden Sie unter stream.compose(...streams).

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

Parameter

stream

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

options

Abortable

Gibt zurück

Duplex

ein Bach, der mit dem Strom streamzusammengesetzt ist.

destroy(Error)

Zerstören Sie den Strom. Optional kann ein 'error' Event ausgesendet werden, und ein 'close' Event ausgesendet werden (sofern emitClose nicht auf gesetzt ist false). Nach diesem Aufruf gibt der lesbare Stream alle internen Ressourcen frei und nachfolgende Aufrufe push() werden ignoriert.

Sobald destroy() aufgerufen wurde, werden weitere Anrufe ein no-op und keine weiteren Fehler außer von _destroy() können als 'error'ausgesendet werden.

Implementatoren sollten diese Methode nicht überschreiben, sondern stattdessen implementieren readable._destroy().

function destroy(error?: Error): Readable

Parameter

error

Error

Fehler, der als Nutzlast weitergegeben wird, falls 'error'

Gibt zurück

drop(number, Abortable)

Diese Methode liefert einen neuen Stream zurück, bei dem die ersten Limit-Chunks von Anfang an weggelassen wurden.

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

Parameter

limit

number

Die Anzahl der Abschnitte, die aus dem lesbaren Bereich entfernt werden müssen.

options

Abortable

Gibt zurück

Ein Stream mit Limit Chunks, der von Anfang an gefallen ist.

emit(string | symbol, any[])

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

Parameter

eventName

string | symbol

args

any[]

Gibt zurück

boolean

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

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

Parameter

eventName

E

args

ReadableEventMap[E]

Gibt zurück

boolean

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

Diese Methode ähnelt und Array.prototype.every ruft fn auf jedem Chunk im Strom auf, um zu prüfen, ob alle wartenden Rückgabewerte wahrheitswürdige Werte für fn sind. Sobald ein fn-Call auf einem Chunked-Rückgabewert awaitfalsch ist, wird der Strom zerstört und das Versprechen mit falseerfüllt. Wenn alle fn-Aufrufe auf den Chunks einen wahrheitswerten Wert zurückgeben, wird das Versprechen mit trueerfüllt.

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

Parameter

fn

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

eine Funktion, um jeden Abschnitt des Stroms aufzurufen. Asynchron oder nicht.

options

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

Gibt zurück

Promise<boolean>

Ein Versprechen, das bewertet, ob trueFN für jeden einzelnen der Chunks einen wahrheitsgemässen Wert zurückgibt.

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

Diese Methode ermöglicht das Filtern des Stroms. Für jeden Chunk im Strom wird die fn-Funktion aufgerufen, und wenn sie einen truthy-Wert zurückgibt, wird der Chunk an den Ergebnisstrom weitergegeben. Wenn die fn-Funktion ein Versprechen zurückgibt – dann ist awaitdieses Versprechen ed.

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

Parameter

fn

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

eine Funktion, um Chunks aus dem Stream zu filtern. Asynchron oder nicht.

options

ReadableOperatorOptions

Gibt zurück

ein Bach, der mit dem Prädikat FN gefiltert wurde.

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>

Parameter

fn

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

options

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

Gibt zurück

Promise<any>

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

Diese Methode ähnelt und Array.prototype.find ruft auf jedem Chunk im Stream fn auf, um einen Chunk mit einem Truthy-Wert für fn zu finden. Sobald der erwartete Rückgabewert eines Fn-Calls Truthy ist, wird der Stream zerstört und das Versprechen mit einem Wert erfüllt, für den Fn einen Truthy-Wert zurückgegeben hat. Wenn alle fn-Aufrufe auf den Chunks einen falschen Wert zurückgeben, wird das Versprechen mit undefinederfüllt.

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

Parameter

fn

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

eine Funktion, um jeden Abschnitt des Stroms aufzurufen. Asynchron oder nicht.

options

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

Gibt zurück

Promise<undefined | T>

Ein Versprechen, das den ersten Chunk bewertet, für den FN mit einem Truthy-Wert bewertet wurde, oder undefined wenn kein Element gefunden wurde.

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

Diese Methode gibt einen neuen Stream zurück, indem der gegebene Callback auf jeden Block des Streams angewendet und das Ergebnis abgeflacht wird.

Es ist möglich, einen Strom oder einen anderen iterablen oder asynchronen Iterablen von fn zurückzugeben, und die resultierenden Ströme werden in den zurückgesendeten Strom eingegliedert (abgeflacht).

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

Parameter

fn

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

eine Funktion, um jeden Chunk im Stream abzubilden. Könnte asynchron sein. Es könnte ein Strom oder Generator sein.

options

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

Gibt zurück

ein Strom, der mit der Funktion fn flach abgebildet wird.

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

Diese Methode ermöglicht das Iterieren eines Stroms. Für jeden Chunk im Strom wird die fn-Funktion aufgerufen. Wenn die fn-Funktion ein Versprechen zurückgibt – dann ist awaitdieses Versprechen ed.

Diese Methode unterscheidet sich von for await...of Schleifen dadurch, dass sie optional Chunks gleichzeitig verarbeiten kann. Außerdem kann eine forEach Iteration nur gestoppt werden, indem eine signal Option bestanden und der zugehörige AbortController abgebrochen wird, während for await...of mit oder returngestoppt break werden kann. In beiden Fällen wird der Strom zerstört.

Diese Methode unterscheidet sich vom Abhören des Ereignisses 'data' dadurch, dass sie das readable Ereignis in der zugrunde liegenden Maschine verwendet und die Anzahl gleichzeitiger FN-Aufrufe begrenzen kann.

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

Parameter

fn

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

eine Funktion, um jeden Abschnitt des Stroms aufzurufen. Asynchron oder nicht.

options

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

Gibt zurück

Promise<void>

Ein Versprechen, wenn der Stream zu Ende ist.

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

Eine Utility-Methode zur Erstellung lesbarer Streams aus Iteratoren.

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

Parameter

iterable

Iterable<any> | AsyncIterable<any>

Objekt, das das Symbol.asyncIterator oder Symbol.iterator das iterable Protokoll implementiert. Erzeugt ein 'Fehler'-Ereignis, wenn ein Nullwert passiert wird.

options

ReadableOptions<Readable>

Optionen bereitgestellt für new stream.Readable([options]). Standardmäßig wird auf gesetzt options.objectModetrue, es sei denn, Readable.from() dies wird explizit durch die Einstellung options.objectMode auf falseausgeschlossen.

Gibt zurück

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

Eine Utility-Methode zur Erstellung eines Readable aus einem Web ReadableStream.

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

Parameter

readableStream

ReadableStream<any>

options

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

Gibt zurück

isDisturbed(ReadableStream<any> | ReadableStream)

Kehrt zurück, egal ob der Stream gelesen oder abgebrochen wurde.

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

Parameter

stream

ReadableStream<any> | ReadableStream

Gibt zurück

boolean

isPaused()

Die Methode readable.isPaused() liefert den aktuellen Betriebszustand der Readable. Dies wird hauptsächlich vom Mechanismus genutzt, der der Methode readable.pipe() zugrunde liegt. In den meisten typischen Fällen gibt es keinen Grund, diese Methode direkt anzuwenden.

const readable = new stream.Readable();

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

Gibt zurück

boolean

iterator(ReadableIteratorOptions)

Der durch diese Methode erstellte Iterator gibt den Nutzern die Möglichkeit, die Zerstörung des Stroms abzubrechen, wenn die Schleife for await...of von return, break, oder throw, beendet wird, oder wenn der Iterator den Strom zerstören sollte, wenn der Strom während der Iteration einen Fehler ausstrahlt.

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

Parameter

options

ReadableIteratorOptions

Gibt zurück

AsyncIterator<any, undefined, any>

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

number

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

number

listeners(string | symbol)

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

Parameter

eventName

string | symbol

Gibt zurück

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

listeners<E>(E)

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

Parameter

eventName

E

Gibt zurück

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

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

Diese Methode erlaubt die Abbildung des Stroms. Die fn-Funktion wird für jeden Chunk im Strom aufgerufen. Wenn die fn-Funktion ein Versprechen zurückgibt, wird dieses Versprechen ed sein await, bevor es an den Ergebnisstrom weitergegeben wird.

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

Parameter

fn

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

eine Funktion, um jeden Chunk im Stream abzubilden. Asynchron oder nicht.

options

ReadableOperatorOptions

Gibt zurück

ein Strom, der mit der Funktion FN abgebildet wird.

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

pause()

Die Methode readable.pause() bewirkt, dass ein Strom im Fließmodus aufhört, Ereignisse auszusenden 'data' , und aus dem Fließmodus wechselt. Alle verfügbaren Daten bleiben im internen Puffer.

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

Die Methode readable.pause() hat keine Wirkung, wenn es einen 'readable' Ereignis-Listener gibt.

function pause(): Readable

Gibt zurück

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

push(any, BufferEncoding)

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

Parameter

chunk

any

encoding

BufferEncoding

Gibt zurück

boolean

rawListeners(string | symbol)

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

Parameter

eventName

string | symbol

Gibt zurück

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

rawListeners<E>(E)

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

Parameter

eventName

E

Gibt zurück

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

read(number)

Die Methode readable.read() liest Daten aus dem internen Puffer und gibt sie zurück. Wenn keine Daten zum Lesen verfügbar sind, null wird sie zurückgegeben. Standardmäßig werden die Daten als Buffer Objekt zurückgegeben, es sei denn, eine Codierung wurde mit der Methode readable.setEncoding() angegeben oder der Strom arbeitet im Objektmodus.

Das optionale size Argument gibt eine bestimmte Anzahl von Bytes an, die gelesen werden sollen. Wenn size keine Bytes zum Lesen verfügbar sind, null werden sie zurückgegeben, es sei denn , der Strom ist beendet, in diesem Fall werden alle im internen Puffer verbleibenden Daten zurückgegeben.

Wenn das Argument size nicht angegeben ist, werden alle im internen Puffer enthaltenen Daten zurückgegeben.

Das Argument size muss kleiner als oder gleich 1 GiB sein.

Die Methode readable.read() sollte nur bei Readable Strömen aufgerufen werden, die im Pause-Modus arbeiten. Im Fließmodus wird automatisch aufgerufen, readable.read() bis der interne Puffer vollständig entleert ist.

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

Jeder Aufruf zu readable.read() gibt einen Datenblock zurück, oder null. Die Chunks sind nicht verkettet. Eine Schleife while ist notwendig, um alle Daten im Puffer zu konsumieren. Beim Lesen kann eine große Datei .read() zurückkommen null, wobei alle bisher gepufferten Inhalte verbraucht wurden, aber es gibt noch weitere Daten, die noch nicht gepuffert sind. In diesem Fall wird ein neues 'readable' Ereignis ausgesendet, wenn sich mehr Daten im Puffer befinden. Schließlich wird das 'end' Ereignis ausgesendet, wenn keine weiteren Daten mehr verfügbar sind.

Daher ist es notwendig, um den gesamten Inhalt einer Datei aus einem zu lesen readable, Chunks über mehrere 'readable' Ereignisse hinweg zu sammeln:

const chunks = [];

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

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

Ein Readable Stream im Objektmodus gibt immer ein einzelnes Element aus einem Aufruf zu readable.read(size)zurück, unabhängig vom Wert des Arguments size .

Wenn die Methode readable.read() einen Datenblock zurückgibt, wird auch ein Ereignis 'data' ausgesendet.

Rufen nach der Ausstrahlung des Ereignisses 'end' werden zurückgerufen null. Es wird kein Laufzeitfehler angezeigt.

function read(size?: number): any

Parameter

size

number

Optionales Argument, um anzugeben, wie viele Daten gelesen werden sollen.

Gibt zurück

any

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

Diese Methode ruft fn auf jedem Abschnitt des Stroms in der Reihenfolge auf und übermittelt ihm das Ergebnis aus der Berechnung des vorherigen Elements. Es gibt ein Versprechen für den Endwert der Reduktion zurück.

Wird kein Anfangswert angegeben, wird das erste Stück des Stroms als Anfangswert verwendet. Ist der Strom leer, wird das Versprechen mit einer TypeError mit der ERR_INVALID_ARGS Code-Eigenschaft abgelehnt.

Die Reduzierfunktion iteriert den Strom Element für Element, was bedeutet, dass es keinen Nebenläufigkeitsparameter oder Parallelität gibt. Um gleichzeitig eine Reduktion durchzuführen, kann man die asynchrone Funktion in die readable.map Methode extrahieren.

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

Parameter

fn

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

eine Reduziererfunktion, um jeden Chunk im Strom aufzurufen. Asynchron oder nicht.

Gibt zurück

Promise<T>

ein Versprechen für den Endwert der Reduktion.

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>

Parameter

fn

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

initial

T

options

Abortable

Gibt zurück

Promise<T>

removeAllListeners(string | symbol)

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

Parameter

eventName

string | symbol

Gibt zurück

removeAllListeners<E>(E)

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

Parameter

eventName

E

Gibt zurück

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

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

Parameter

eventName

string | symbol

listener

(args: any[]) => void

Gibt zurück

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

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

Parameter

eventName

E

listener

(args: ReadableEventMap[E]) => void

Gibt zurück

resume()

Die Methode readable.resume() bewirkt, dass ein explizit pausierter Readable Strom wieder Ereignisse 'data' aussendet, wodurch der Strom in den Flussmodus wechselt.

Die Methode readable.resume() kann verwendet werden, um die Daten aus einem Strom vollständig zu konsumieren, ohne diese Daten tatsächlich zu verarbeiten:

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

Die Methode readable.resume() hat keine Wirkung, wenn es einen 'readable' Ereignis-Listener gibt.

function resume(): Readable

Gibt zurück

setEncoding(BufferEncoding)

Die Methode readable.setEncoding() legt die Zeichenkodierung für die aus dem Strom Readable gelesenen Daten fest.

Standardmäßig wird keine Codierung zugewiesen und Stromdaten werden als Buffer Objekte zurückgegeben. Das Setzen einer Codierung führt dazu, dass die Stromdaten als Strings der angegebenen Codierung und nicht als Buffer Objekte zurückgegeben werden. Zum Beispiel führt ein Aufruf readable.setEncoding('utf8') dazu, dass die Ausgabedaten als UTF-8-Daten interpretiert und als Zeichenketten übermittelt werden. Ein Aufruf readable.setEncoding('hex') führt dazu, dass die Daten im hexadezimalen String-Format codiert werden.

Der Strom Readable verarbeitet korrekt Multibyte-Zeichen, die durch den Strom geliefert werden und sonst falsch decodiert würden, wenn sie einfach als Objekte aus dem Strom Buffer gezogen würden.

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

Parameter

encoding

BufferEncoding

Die zu verwendende Codierung.

Gibt zurück

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

Diese Methode ist ähnlich wie Array.prototype.some und ruft fn auf jedem Chunk im Strom auf, bis der erwartete Rückgabewert (oder ein Truthy-Wert) erreicht ist true . Sobald ein FN-Call auf einen Chunk awaitEd-Rückgabewert wahrheitsgemäß ist, wird der Stream zerstört und das Versprechen mit trueerfüllt. Wenn keiner der fn-Aufrufe auf die Chunks einen wahrheitlichen Wert zurückgibt, wird das Versprechen mit falseerfüllt.

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

Parameter

fn

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

eine Funktion, um jeden Abschnitt des Stroms aufzurufen. Asynchron oder nicht.

options

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

Gibt zurück

Promise<boolean>

Ein Versprechen, das bewertet, ob trueFN zumindest einen Truthy-Wert für mindestens einen der Chunks zurückgibt.

take(number, Abortable)

Diese Methode gibt einen neuen Strom mit den ersten Limit-Chunks zurück.

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

Parameter

limit

number

Die Anzahl der Abschnitte, die man aus dem lesbaren Verfahren nehmen muss.

options

Abortable

Gibt zurück

Ein Stream mit limitierten Abschnitten.

toArray(Abortable)

Diese Methode ermöglicht es einfach, den Inhalt eines Stroms zu erhalten.

Da diese Methode den gesamten Strom in den Speicher liest, werden die Vorteile von Strömen aufgehoben. Es ist für Interoperabilität und Bequemlichkeit gedacht, nicht als primäre Methode, Streams zu konsumieren.

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

Parameter

options

Abortable

Gibt zurück

Promise<any[]>

ein Versprechen, das ein Array mit dem Inhalt des Stroms enthält.

toWeb(ReadableStream, ReadableToWebOptions)

Eine Utility-Methode zur Erstellung eines Webs ReadableStream aus einem Readable.

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

Parameter

streamReadable

ReadableStream

options

ReadableToWebOptions

Gibt zurück

ReadableStream<any>

unpipe(WritableStream)

Die Methode readable.unpipe() trennt einen Writable zuvor angelegten Strahl mittels Rohrmethode .

Wenn das nicht destination angegeben ist, werden alle Rohre abgetrennt.

Wenn das destination angegeben ist, aber kein Rohr dafür eingerichtet ist, bewirkt die Methode nichts.

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

Parameter

destination

WritableStream

Optionaler spezieller Bach zum Entrohren

Gibt zurück

unshift(any, BufferEncoding)

Das Senden chunk als null Signale das Ende des Stroms (EOF) und verhält sich gleich wie readable.push(null), woraufhin keine weiteren Daten mehr geschrieben werden können. Das EOF-Signal wird ans Ende des Puffers gelegt und alle gepufferten Daten werden weiterhin entfernt.

Die Methode readable.unshift() drückt einen Datenblock zurück in den internen Puffer. Dies ist nützlich in bestimmten Situationen, in denen ein Strom von Code verbraucht wird, der eine bestimmte Menge an Daten "entverbrauchen" muss, die er optimistisch aus der Quelle gezogen hat, damit die Daten an eine andere Partei weitergegeben werden können.

Die Methode stream.unshift(chunk) kann nicht aufgerufen werden, nachdem das Ereignis 'end' ausgesendet wurde, sonst wird ein Laufzeitfehler ausgelöst.

Entwickler, die häufig nutzen stream.unshift() , sollten stattdessen in Erwägung ziehen, auf einen Transform Stream umzusteigen. Siehe den Abschnitt API for stream implementers für weitere Informationen.

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

Im Gegensatz zu Push wird der Leseprozess nicht durch das Zurücksetzen des internen Lesezustands des Streams stream.unshift(chunk) beendet. Dies kann unerwartete Ergebnisse verursachen, wenn readable.unshift() er während eines Lesens (d. h. aus einer _read Implementierung auf einem benutzerdefinierten Stream ) aufgerufen wird. Das Folgen des Aufrufs mit readable.unshift() einem sofortigen Push setzt den Lesezustand entsprechend zurück, es ist jedoch am besten, während des Lesens einen Anruf readable.unshift() zu vermeiden.

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

Parameter

chunk

any

Datenblock, das auf die Lese-Warteschlange rückgängig gemacht werden kann. Für Ströme, die nicht im Objektmodus arbeiten, chunk muss es sich um {string}, {Buffer}, {TypedArray}, {DataView} oder nullhandeln. Für Objektmodus-Ströme chunk kann jeder JavaScript-Wert sein.

encoding

BufferEncoding

Codierung von String-Chunks. Muss eine gültige Buffer Codierung sein, wie 'utf8' oder 'ascii'.

wrap(ReadableStream)

Vor Node.js 0.10 implementierten Streams nicht die gesamte node:stream Modul-API, wie sie derzeit definiert ist. (Siehe Compatibility für weitere Informationen.)

Wenn eine ältere Node.js-Bibliothek verwendet wird, die Ereignisse ausgibt 'data' und eine rein beratende Pausenmethode besitzt, kann diese readable.wrap() Methode verwendet werden, um einen Readable Strom zu erstellen, der den alten Strom als Datenquelle nutzt.

Sie wird selten notwendig readable.wrap() sein, aber die Methode wurde als Komfort für die Interaktion mit älteren Node.js-Anwendungen und Bibliotheken bereitgestellt.

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

Parameter

stream

ReadableStream

Ein "altmodischer" lesbarer Stream

Gibt zurück

[asyncIterator]()

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

Gibt zurück

AsyncIterator<any, undefined, any>

AsyncIterator um den Strom vollständig zu konsumieren.

Details zur geerbten Methode

eventNames()

Gibt ein Array zurück, das die Ereignisse auflistet, für die der Emitter Listener registriert hat.

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

Gibt zurück

(string | symbol)[]

Geerbt von Stream.eventNames

getMaxListeners()

Gibt den aktuellen Maximallistenerwert für die EventEmitter zurück, die entweder durch emitter.setMaxListeners(n) oder standardmäßig auf events.defaultMaxListenersfestgelegt ist.

function getMaxListeners(): number

Gibt zurück

number

Geerbt von Stream.getMaxListeners

pipe<T>(T, PipeOptions)

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

Parameter

destination

T

options

PipeOptions

Gibt zurück

T

Geerbt von Stream.pipe

setMaxListeners(number)

Standardmäßig druckt EventEmitters eine Warnung, wenn für ein bestimmtes Ereignis mehr als 10 Listener hinzugefügt werden. Dies ist ein nützlicher Standardwert, der hilft, Speicherverluste zu finden. Mit der emitter.setMaxListeners()-Methode kann der Grenzwert für diese spezifische EventEmitter Instanz geändert werden. Der Wert kann auf Infinity (oder 0) festgelegt werden, um eine unbegrenzte Anzahl von Listenern anzugeben.

Gibt einen Verweis auf die EventEmitterzurück, sodass Aufrufe verkettet werden können.

function setMaxListeners(n: number): Readable

Parameter

n

number

Gibt zurück

Geerbt von Stream.setMaxListeners

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

Die Methode Symbol.for('nodejs.rejection') wird aufgerufen, wenn eine Versprechensablehnung beim Aussenden eines Ereignisses auftritt und captureRejections auf dem Emitter aktiviert ist. Es ist möglich, anstelle von events.captureRejectionSymbolzu verwendenSymbol.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[])

Parameter

error

Error

event

string | symbol

args

any[]

Geerbt von Stream.__@captureRejectionSymbol@175