API Web Streams
[Historique]
| Version | Modifications |
|---|---|
| v21.0.0 | N'est plus expérimental. |
| v18.0.0 | L'utilisation de cette API n'émet plus d'avertissement d'exécution. |
| v16.5.0 | Ajouté dans : v16.5.0 |
[Stable : 2 - Stable]
Stable : 2 Stabilité : 2 - Stable
Une implémentation de la norme WHATWG Streams.
Aperçu
La norme WHATWG Streams (ou « flux Web ») définit une API pour la gestion des données de flux. Elle est similaire à l'API Streams de Node.js, mais elle est apparue plus tard et est devenue l'API « standard » pour la diffusion de données en continu dans de nombreux environnements JavaScript.
Il existe trois principaux types d'objets :
ReadableStream- Représente une source de données de flux.WritableStream- Représente une destination pour les données de flux.TransformStream- Représente un algorithme de transformation des données de flux.
Exemple ReadableStream
Cet exemple crée un ReadableStream simple qui envoie l'horodatage performance.now() actuel une fois par seconde indéfiniment. Un itérable asynchrone est utilisé pour lire les données du flux.
import {
ReadableStream,
} from 'node:stream/web';
import {
setInterval as every,
} from 'node:timers/promises';
import {
performance,
} from 'node:perf_hooks';
const SECOND = 1000;
const stream = new ReadableStream({
async start(controller) {
for await (const _ of every(SECOND))
controller.enqueue(performance.now());
},
});
for await (const value of stream)
console.log(value);const {
ReadableStream,
} = require('node:stream/web');
const {
setInterval: every,
} = require('node:timers/promises');
const {
performance,
} = require('node:perf_hooks');
const SECOND = 1000;
const stream = new ReadableStream({
async start(controller) {
for await (const _ of every(SECOND))
controller.enqueue(performance.now());
},
});
(async () => {
for await (const value of stream)
console.log(value);
})();API
Classe : ReadableStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l'objet global. |
| v16.5.0 | Ajoutée dans : v16.5.0 |
new ReadableStream([underlyingSource [, strategy]])
Ajoutée dans : v16.5.0
underlyingSource<Object>start<Function> Une fonction définie par l'utilisateur qui est invoquée immédiatement lorsque leReadableStreamest créé.controller<ReadableStreamDefaultController> | <ReadableByteStreamController>Retourne :
undefinedou une promesse résolue avecundefined.pull<Function> Une fonction définie par l'utilisateur qui est appelée à plusieurs reprises lorsque la file d'attente interneReadableStreamn'est pas pleine. L'opération peut être synchrone ou asynchrone. Si elle est asynchrone, la fonction ne sera pas appelée à nouveau tant que la promesse précédemment retournée n'est pas résolue.controller<ReadableStreamDefaultController> | <ReadableByteStreamController>Retourne : Une promesse résolue avec
undefined.cancel<Function> Une fonction définie par l'utilisateur qui est appelée lorsque leReadableStreamest annulé.reason<any>Retourne : Une promesse résolue avec
undefined.type<string> Doit être'bytes'ouundefined.autoAllocateChunkSize<number> Utilisé uniquement lorsquetypeest égal à'bytes'. Lorsqu'il est défini sur une valeur différente de zéro, un tampon de vue est automatiquement alloué àReadableByteStreamController.byobRequest. Lorsqu'il n'est pas défini, il faut utiliser les files d'attente internes du flux pour transférer des données via le lecteur par défautReadableStreamDefaultReader.
strategy<Object>highWaterMark<number> La taille maximale de la file d'attente interne avant que la contre-pression ne soit appliquée.size<Function> Une fonction définie par l'utilisateur, utilisée pour identifier la taille de chaque bloc de données.chunk<any>- Retourne : <number>
readableStream.locked
Ajouté dans : v16.5.0
- Type : <boolean> Défini sur
trues'il existe un lecteur actif pour ce <ReadableStream>.
La propriété readableStream.locked est false par défaut et passe à true lorsqu'il existe un lecteur actif consommant les données du flux.
readableStream.cancel([reason])
Ajouté dans : v16.5.0
reason<any>- Retourne : Une promesse résolue avec
undefinedune fois l'annulation terminée.
readableStream.getReader([options])
Ajouté dans : v16.5.0
options<Object>mode<string>'byob'ouundefined
Retourne : <ReadableStreamDefaultReader> | <ReadableStreamBYOBReader>
import { ReadableStream } from 'node:stream/web';
const stream = new ReadableStream();
const reader = stream.getReader();
console.log(await reader.read());const { ReadableStream } = require('node:stream/web');
const stream = new ReadableStream();
const reader = stream.getReader();
reader.read().then(console.log);Fait passer readableStream.locked à true.
readableStream.pipeThrough(transform[, options])
Ajouté dans : v16.5.0
transform<Object>readable<ReadableStream> LeReadableStreamvers lequeltransform.writableenverra les données potentiellement modifiées qu'il reçoit de ceReadableStream.writable<WritableStream> LeWritableStreamdans lequel les données de ceReadableStreamseront écrites.
options<Object>preventAbort<boolean> Lorsquetrue, les erreurs dans ceReadableStreamn'entraîneront pas l'abandon detransform.writable.preventCancel<boolean> Lorsquetrue, les erreurs dans la destinationtransform.writablen'entraînent pas l'annulation de ceReadableStream.preventClose<boolean> Lorsquetrue, la fermeture de ceReadableStreamn'entraîne pas la fermeture detransform.writable.signal<AbortSignal> Permet d'annuler le transfert de données à l'aide d'un <AbortController>.
Retourne : <ReadableStream> Depuis
transform.readable.
Connecte ce <ReadableStream> à la paire de <ReadableStream> et <WritableStream> fournie dans l'argument transform de sorte que les données de ce <ReadableStream> soient écrites dans transform.writable, éventuellement transformées, puis envoyées à transform.readable. Une fois le pipeline configuré, transform.readable est renvoyé.
Fait passer readableStream.locked à true pendant que l'opération de pipe est active.
import {
ReadableStream,
TransformStream,
} from 'node:stream/web';
const stream = new ReadableStream({
start(controller) {
controller.enqueue('a');
},
});
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
const transformedStream = stream.pipeThrough(transform);
for await (const chunk of transformedStream)
console.log(chunk);
// Prints: Aconst {
ReadableStream,
TransformStream,
} = require('node:stream/web');
const stream = new ReadableStream({
start(controller) {
controller.enqueue('a');
},
});
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
const transformedStream = stream.pipeThrough(transform);
(async () => {
for await (const chunk of transformedStream)
console.log(chunk);
// Prints: A
})();readableStream.pipeTo(destination[, options])
Ajouté dans : v16.5.0
destination<WritableStream> Un <WritableStream> vers lequel les données de ceReadableStreamseront écrites.options<Object>preventAbort<boolean> Lorsquetrue, les erreurs dans ceReadableStreamn'entraîneront pas l'abandon dedestination.preventCancel<boolean> Lorsquetrue, les erreurs dans ladestinationn'entraîneront pas l'annulation de ceReadableStream.preventClose<boolean> Lorsquetrue, la fermeture de ceReadableStreamn'entraîne pas la fermeture dedestination.signal<AbortSignal> Permet d'annuler le transfert de données à l'aide d'un <AbortController>.
Retourne : Une promesse résolue avec
undefined
Fait en sorte que readableStream.locked soit true pendant que l'opération de tube est active.
readableStream.tee()
[Historique]
| Version | Modifications |
|---|---|
| v18.10.0, v16.18.0 | Prise en charge du partage d'un flux d'octets lisible. |
| v16.5.0 | Ajouté dans : v16.5.0 |
- Retourne : <ReadableStream[]>
Retourne une paire de nouvelles instances <ReadableStream> vers lesquelles les données de ce ReadableStream seront transmises. Chacune recevra les mêmes données.
Fait en sorte que readableStream.locked soit true.
readableStream.values([options])
Ajouté dans : v16.5.0
options<Object>preventCancel<boolean> Lorsquetrue, empêche le <ReadableStream> d'être fermé lorsque l'itérateur asynchrone se termine brusquement. Par défaut :false.
Crée et retourne un itérateur asynchrone utilisable pour consommer les données de ce ReadableStream.
Fait en sorte que readableStream.locked soit true pendant que l'itérateur asynchrone est actif.
import { Buffer } from 'node:buffer';
const stream = new ReadableStream(getSomeSource());
for await (const chunk of stream.values({ preventCancel: true }))
console.log(Buffer.from(chunk).toString());Itération Asynchrone
L'objet <ReadableStream> prend en charge le protocole d'itérateur asynchrone en utilisant la syntaxe for await.
import { Buffer } from 'node:buffer';
const stream = new ReadableStream(getSomeSource());
for await (const chunk of stream)
console.log(Buffer.from(chunk).toString());L'itérateur asynchrone consommera le <ReadableStream> jusqu'à ce qu'il se termine.
Par défaut, si l'itérateur asynchrone se termine prématurément (via un break, un return ou un throw), le <ReadableStream> sera fermé. Pour empêcher la fermeture automatique du <ReadableStream>, utilisez la méthode readableStream.values() pour acquérir l'itérateur asynchrone et définissez l'option preventCancel sur true.
Le <ReadableStream> ne doit pas être verrouillé (c'est-à-dire qu'il ne doit pas avoir de lecteur actif existant). Pendant l'itération asynchrone, le <ReadableStream> sera verrouillé.
Transfert avec postMessage()
Une instance de <ReadableStream> peut être transférée en utilisant un <MessagePort>.
const stream = new ReadableStream(getReadableSourceSomehow());
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
data.getReader().read().then((chunk) => {
console.log(chunk);
});
};
port2.postMessage(stream, [stream]);ReadableStream.from(iterable)
Ajouté dans : v20.6.0
iterable<Iterable> Objet implémentant le protocole itérableSymbol.asyncIteratorouSymbol.iterator.
Une méthode utilitaire qui crée un nouveau <ReadableStream> à partir d'un itérable.
import { ReadableStream } from 'node:stream/web';
async function* asyncIterableGenerator() {
yield 'a';
yield 'b';
yield 'c';
}
const stream = ReadableStream.from(asyncIterableGenerator());
for await (const chunk of stream)
console.log(chunk); // Prints: 'a', 'b', 'c'const { ReadableStream } = require('node:stream/web');
async function* asyncIterableGenerator() {
yield 'a';
yield 'b';
yield 'c';
}
(async () => {
const stream = ReadableStream.from(asyncIterableGenerator());
for await (const chunk of stream)
console.log(chunk); // Prints: 'a', 'b', 'c'
})();Classe : ReadableStreamDefaultReader
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est désormais exposée sur l’objet global. |
| v16.5.0 | Ajoutée dans : v16.5.0 |
Par défaut, appeler readableStream.getReader() sans arguments renverra une instance de ReadableStreamDefaultReader. Le lecteur par défaut traite les morceaux de données transmis via le flux comme des valeurs opaques, ce qui permet à <ReadableStream> de fonctionner généralement avec n’importe quelle valeur JavaScript.
new ReadableStreamDefaultReader(stream)
Ajoutée dans : v16.5.0
stream<ReadableStream>
Crée un nouveau <ReadableStreamDefaultReader> qui est verrouillé sur le <ReadableStream> donné.
readableStreamDefaultReader.cancel([reason])
Ajoutée dans : v16.5.0
reason<any>- Retourne : Une Promise résolue avec
undefined.
Annule le <ReadableStream> et retourne une Promise qui est résolue lorsque le flux sous-jacent a été annulé.
readableStreamDefaultReader.closed
Ajoutée dans : v16.5.0
- Type : <Promise> Résolue avec
undefinedlorsque le <ReadableStream> associé est fermé ou rejetée si le flux présente des erreurs ou si le verrou du lecteur est libéré avant que le flux ne termine sa fermeture.
readableStreamDefaultReader.read()
Ajoutée dans : v16.5.0
Demande le prochain morceau de données du <ReadableStream> sous-jacent et retourne une Promise qui est résolue avec les données une fois qu’elles sont disponibles.
readableStreamDefaultReader.releaseLock()
Ajouté dans : v16.5.0
Libère le verrouillage de ce lecteur sur le <ReadableStream> sous-jacent.
Classe : ReadableStreamBYOBReader
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est désormais exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
ReadableStreamBYOBReader est un consommateur alternatif pour les <ReadableStream> orientés octets (ceux qui sont créés avec underlyingSource.type défini sur 'bytes' lorsque le ReadableStream a été créé).
BYOB est l'abréviation de "bring your own buffer" (apportez votre propre tampon). Il s'agit d'un modèle qui permet une lecture plus efficace des données orientées octets qui évite les copies superflues.
import {
open,
} from 'node:fs/promises';
import {
ReadableStream,
} from 'node:stream/web';
import { Buffer } from 'node:buffer';
class Source {
type = 'bytes';
autoAllocateChunkSize = 1024;
async start(controller) {
this.file = await open(new URL(import.meta.url));
this.controller = controller;
}
async pull(controller) {
const view = controller.byobRequest?.view;
const {
bytesRead,
} = await this.file.read({
buffer: view,
offset: view.byteOffset,
length: view.byteLength,
});
if (bytesRead === 0) {
await this.file.close();
this.controller.close();
}
controller.byobRequest.respond(bytesRead);
}
}
const stream = new ReadableStream(new Source());
async function read(stream) {
const reader = stream.getReader({ mode: 'byob' });
const chunks = [];
let result;
do {
result = await reader.read(Buffer.alloc(100));
if (result.value !== undefined)
chunks.push(Buffer.from(result.value));
} while (!result.done);
return Buffer.concat(chunks);
}
const data = await read(stream);
console.log(Buffer.from(data).toString());new ReadableStreamBYOBReader(stream)
Ajouté dans : v16.5.0
stream<ReadableStream>
Crée un nouveau ReadableStreamBYOBReader qui est verrouillé sur le <ReadableStream> donné.
readableStreamBYOBReader.cancel([reason])
Ajouté dans : v16.5.0
reason<any>- Retourne : Une promesse résolue avec
undefined.
Annule le <ReadableStream> et renvoie une promesse qui est résolue lorsque le flux sous-jacent a été annulé.
readableStreamBYOBReader.closed
Ajouté dans : v16.5.0
- Type : <Promise> Résolue avec
undefinedlorsque le <ReadableStream> associé est fermé ou rejetée si le flux rencontre une erreur ou si le verrou du lecteur est libéré avant que le flux ne finisse de se fermer.
readableStreamBYOBReader.read(view[, options])
[Historique]
| Version | Modifications |
|---|---|
| v21.7.0, v20.17.0 | Ajout de l'option min. |
| v16.5.0 | Ajouté dans : v16.5.0 |
view<Buffer> | <TypedArray> | <DataView>options<Object>min<number> Lorsqu'elle est définie, la promesse renvoyée ne sera résolue que lorsque le nombremind'éléments sera disponible. Lorsqu'elle n'est pas définie, la promesse se résout lorsqu'au moins un élément est disponible.
Retourne : Une promesse résolue avec un objet :
value<TypedArray> | <DataView>done<boolean>
Demande le bloc de données suivant depuis le <ReadableStream> sous-jacent et renvoie une promesse qui est résolue avec les données une fois qu'elles sont disponibles.
Ne passez pas une instance d'objet <Buffer> mis en pool à cette méthode. Les objets Buffer mis en pool sont créés à l'aide de Buffer.allocUnsafe(), ou Buffer.from(), ou sont souvent renvoyés par divers rappels du module node:fs. Ces types de Buffer utilisent un objet <ArrayBuffer> sous-jacent partagé qui contient toutes les données de toutes les instances Buffer mises en pool. Lorsqu'un Buffer, <TypedArray> ou <DataView> est passé à readableStreamBYOBReader.read(), l'ArrayBuffer sous-jacent de la vue est détaché, invalidant toutes les vues existantes qui peuvent exister sur cet ArrayBuffer. Cela peut avoir des conséquences désastreuses pour votre application.
readableStreamBYOBReader.releaseLock()
Ajouté dans : v16.5.0
Libère le verrou de ce lecteur sur le <ReadableStream> sous-jacent.
Classe : ReadableStreamDefaultController
Ajouté dans : v16.5.0
Chaque <ReadableStream> a un contrôleur responsable de l'état interne et de la gestion de la file d'attente du stream. Le ReadableStreamDefaultController est l'implémentation de contrôleur par défaut pour les ReadableStreams qui ne sont pas orientés octets.
readableStreamDefaultController.close()
Ajouté dans : v16.5.0
Ferme le <ReadableStream> auquel ce contrôleur est associé.
readableStreamDefaultController.desiredSize
Ajouté dans : v16.5.0
- Type : <number>
Renvoie la quantité de données restante pour remplir la file d'attente du <ReadableStream>.
readableStreamDefaultController.enqueue([chunk])
Ajouté dans : v16.5.0
chunk<any>
Ajoute un nouveau bloc de données à la file d'attente du <ReadableStream>.
readableStreamDefaultController.error([error])
Ajouté dans : v16.5.0
error<any>
Signale une erreur qui provoque l'erreur et la fermeture du <ReadableStream>.
Classe : ReadableByteStreamController
[Historique]
| Version | Modifications |
|---|---|
| v18.10.0 | Prise en charge de la gestion d'une requête de tirage BYOB d'un lecteur libéré. |
| v16.5.0 | Ajouté dans : v16.5.0 |
Chaque <ReadableStream> a un contrôleur responsable de l'état interne et de la gestion de la file d'attente du stream. Le ReadableByteStreamController est destiné aux ReadableStreams orientés octets.
readableByteStreamController.byobRequest
Ajouté dans : v16.5.0
- Type : <ReadableStreamBYOBRequest>
readableByteStreamController.close()
Ajouté dans : v16.5.0
Ferme le <ReadableStream> auquel ce contrôleur est associé.
readableByteStreamController.desiredSize
Ajouté dans : v16.5.0
- Type : <number>
Renvoie la quantité de données restant à remplir dans la file d'attente du <ReadableStream>.
readableByteStreamController.enqueue(chunk)
Ajouté dans : v16.5.0
chunk: <Buffer> | <TypedArray> | <DataView>
Ajoute un nouveau bloc de données à la file d'attente du <ReadableStream>.
readableByteStreamController.error([error])
Ajouté dans : v16.5.0
error<any>
Signale une erreur qui provoque l'erreur et la fermeture du <ReadableStream>.
Classe : ReadableStreamBYOBRequest
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est désormais exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
Lors de l'utilisation de ReadableByteStreamController dans les flux orientés octets, et lors de l'utilisation de ReadableStreamBYOBReader, la propriété readableByteStreamController.byobRequest fournit un accès à une instance ReadableStreamBYOBRequest qui représente la requête de lecture en cours. L'objet est utilisé pour accéder à l'ArrayBuffer/TypedArray qui a été fourni pour que la requête de lecture soit remplie, et fournit des méthodes pour signaler que les données ont été fournies.
readableStreamBYOBRequest.respond(bytesWritten)
Ajouté dans : v16.5.0
bytesWritten<number>
Signale qu'un nombre bytesWritten d'octets a été écrit dans readableStreamBYOBRequest.view.
readableStreamBYOBRequest.respondWithNewView(view)
Ajouté dans : v16.5.0
view<Buffer> | <TypedArray> | <DataView>
Signale que la requête a été satisfaite avec des octets écrits dans un nouveau Buffer, TypedArray ou DataView.
readableStreamBYOBRequest.view
Ajouté dans : v16.5.0
- Type : <Buffer> | <TypedArray> | <DataView>
Classe : WritableStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
Le WritableStream est une destination vers laquelle les données de flux sont envoyées.
import {
WritableStream,
} from 'node:stream/web';
const stream = new WritableStream({
write(chunk) {
console.log(chunk);
},
});
await stream.getWriter().write('Hello World');new WritableStream([underlyingSink[, strategy]])
Ajouté dans : v16.5.0
underlyingSink<Object>start<Function> Une fonction définie par l'utilisateur qui est invoquée immédiatement lorsque leWritableStreamest créé.controller<WritableStreamDefaultController>Retourne :
undefinedou une promesse remplie avecundefined.write<Function> Une fonction définie par l'utilisateur qui est invoquée lorsqu'un bloc de données a été écrit dans leWritableStream.chunk<any>controller<WritableStreamDefaultController>Retourne : Une promesse remplie avec
undefined.close<Function> Une fonction définie par l'utilisateur qui est appelée lorsque leWritableStreamest fermé.Retourne : Une promesse remplie avec
undefined.abort<Function> Une fonction définie par l'utilisateur qui est appelée pour fermer brusquement leWritableStream.reason<any>Retourne : Une promesse remplie avec
undefined.type<any> L'optiontypeest réservée pour une utilisation future et doit être indéfinie.
strategy<Object>highWaterMark<number> La taille maximale de la file d'attente interne avant l'application de la contre-pression.size<Function> Une fonction définie par l'utilisateur utilisée pour identifier la taille de chaque bloc de données.chunk<any>- Retourne : <number>
writableStream.abort([reason])
Ajouté dans : v16.5.0
reason<any>- Retourne : Une promesse remplie avec
undefined.
Interrompt brusquement le WritableStream. Toutes les écritures en file d’attente seront annulées avec leurs promesses associées rejetées.
writableStream.close()
Ajouté dans : v16.5.0
- Retourne : Une promesse remplie avec
undefined.
Ferme le WritableStream lorsqu’aucune écriture supplémentaire n’est attendue.
writableStream.getWriter()
Ajouté dans : v16.5.0
- Retourne : <WritableStreamDefaultWriter>
Crée et retourne une nouvelle instance d’écriture qui peut être utilisée pour écrire des données dans le WritableStream.
writableStream.locked
Ajouté dans : v16.5.0
- Type : <boolean>
La propriété writableStream.locked est false par défaut et passe à true lorsqu’il y a un writer actif attaché à ce WritableStream.
Transfert avec postMessage()
Une instance <WritableStream> peut être transférée en utilisant un <MessagePort>.
const stream = new WritableStream(getWritableSinkSomehow());
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
data.getWriter().write('hello');
};
port2.postMessage(stream, [stream]);Classe : WritableStreamDefaultWriter
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
new WritableStreamDefaultWriter(stream)
Ajouté dans : v16.5.0
stream<WritableStream>
Crée un nouveau WritableStreamDefaultWriter qui est verrouillé au WritableStream donné.
writableStreamDefaultWriter.abort([reason])
Ajouté dans : v16.5.0
reason<any>- Retourne : Une promesse remplie avec
undefined.
Interrompt brusquement le WritableStream. Toutes les écritures en file d’attente seront annulées avec leurs promesses associées rejetées.
writableStreamDefaultWriter.close()
Ajouté dans : v16.5.0
- Retourne : Une promesse résolue avec
undefined.
Ferme le WritableStream lorsqu'aucune écriture supplémentaire n'est attendue.
writableStreamDefaultWriter.closed
Ajouté dans : v16.5.0
- Type : <Promise> Résolue avec
undefinedlorsque le <WritableStream> associé est fermé ou rejetée si le flux rencontre des erreurs ou si le verrou du writer est relâché avant que le flux ne termine sa fermeture.
writableStreamDefaultWriter.desiredSize
Ajouté dans : v16.5.0
- Type : <number>
La quantité de données requise pour remplir la file d'attente du <WritableStream>.
writableStreamDefaultWriter.ready
Ajouté dans : v16.5.0
- Type : <Promise> Résolue avec
undefinedlorsque le writer est prêt à être utilisé.
writableStreamDefaultWriter.releaseLock()
Ajouté dans : v16.5.0
Libère le verrou de ce writer sur le <ReadableStream> sous-jacent.
writableStreamDefaultWriter.write([chunk])
Ajouté dans : v16.5.0
chunk: <any>- Retourne : Une promesse résolue avec
undefined.
Ajoute un nouveau bloc de données à la file d'attente du <WritableStream>.
Classe : WritableStreamDefaultController
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
Le WritableStreamDefaultController gère l'état interne du <WritableStream>.
writableStreamDefaultController.error([error])
Ajouté dans : v16.5.0
error<any>
Appelé par le code utilisateur pour signaler qu'une erreur s'est produite lors du traitement des données du WritableStream. Une fois appelé, le <WritableStream> sera abandonné, avec les écritures en attente actuellement annulées.
writableStreamDefaultController.signal
- Type : <AbortSignal> Un
AbortSignalqui peut être utilisé pour annuler les opérations d’écriture ou de fermeture en attente lorsqu’un <WritableStream> est interrompu.
Class : TransformStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v16.5.0 | Ajoutée dans : v16.5.0 |
Un TransformStream se compose d’un <ReadableStream> et d’un <WritableStream> qui sont connectés de telle sorte que les données écrites dans le WritableStream soient reçues, et potentiellement transformées, avant d’être poussées dans la file d’attente du ReadableStream.
import {
TransformStream,
} from 'node:stream/web';
const transform = new TransformStream({
transform(chunk, controller) {
controller.enqueue(chunk.toUpperCase());
},
});
await Promise.all([
transform.writable.getWriter().write('A'),
transform.readable.getReader().read(),
]);new TransformStream([transformer[, writableStrategy[, readableStrategy]]])
Ajoutée dans : v16.5.0
transformer<Object>start<Function> Une fonction définie par l’utilisateur qui est appelée immédiatement lorsque leTransformStreamest créé.controller<TransformStreamDefaultController>Renvoie :
undefinedou une promesse remplie avecundefinedtransform<Function> Une fonction définie par l’utilisateur qui reçoit, et potentiellement modifie, un bloc de données écrit danstransformStream.writable, avant de le transférer verstransformStream.readable.chunk<any>controller<TransformStreamDefaultController>Renvoie : une promesse remplie avec
undefined.flush<Function> Une fonction définie par l’utilisateur qui est appelée immédiatement avant que le côté accessible en écriture duTransformStreamne soit fermé, signalant la fin du processus de transformation.controller<TransformStreamDefaultController>Renvoie : une promesse remplie avec
undefined.readableType<any> l’optionreadableTypeest réservée pour une utilisation future et doit êtreundefined.writableType<any> l’optionwritableTypeest réservée pour une utilisation future et doit êtreundefined.
writableStrategy<Object>highWaterMark<number> La taille maximale de la file d’attente interne avant l’application de la contre-pression.size<Function> Une fonction définie par l’utilisateur utilisée pour identifier la taille de chaque bloc de données.chunk<any>- Renvoie : <number>
readableStrategy<Object>highWaterMark<number> La taille maximale de la file d’attente interne avant l’application de la contre-pression.size<Function> Une fonction définie par l’utilisateur utilisée pour identifier la taille de chaque bloc de données.chunk<any>- Renvoie : <number>
transformStream.readable
Ajouté dans : v16.5.0
- Type : <ReadableStream>
transformStream.writable
Ajouté dans : v16.5.0
- Type : <WritableStream>
Transfert avec postMessage()
Une instance de <TransformStream> peut être transférée en utilisant un <MessagePort>.
const stream = new TransformStream();
const { port1, port2 } = new MessageChannel();
port1.onmessage = ({ data }) => {
const { writable, readable } = data;
// ...
};
port2.postMessage(stream, [stream]);Classe : TransformStreamDefaultController
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
Le TransformStreamDefaultController gère l'état interne du TransformStream.
transformStreamDefaultController.desiredSize
Ajouté dans : v16.5.0
- Type : <number>
La quantité de données nécessaire pour remplir la queue côté lisible.
transformStreamDefaultController.enqueue([chunk])
Ajouté dans : v16.5.0
chunk<any>
Ajoute un morceau de données à la queue côté lisible.
transformStreamDefaultController.error([reason])
Ajouté dans : v16.5.0
reason<any>
Signale aux côtés lisible et inscriptible qu'une erreur s'est produite lors du traitement des données de transformation, ce qui entraîne la fermeture abrupte des deux côtés.
transformStreamDefaultController.terminate()
Ajouté dans : v16.5.0
Ferme le côté lisible du transport et entraîne la fermeture abrupte du côté inscriptible avec une erreur.
Classe : ByteLengthQueuingStrategy
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l'objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
new ByteLengthQueuingStrategy(init)
Ajouté dans : v16.5.0
byteLengthQueuingStrategy.highWaterMark
Ajouté dans : v16.5.0
- Type : <number>
byteLengthQueuingStrategy.size
Ajouté dans : v16.5.0
- Type : <Function>
Class: CountQueuingStrategy
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v16.5.0 | Ajouté dans : v16.5.0 |
new CountQueuingStrategy(init)
Ajouté dans : v16.5.0
countQueuingStrategy.highWaterMark
Ajouté dans : v16.5.0
- Type : <number>
countQueuingStrategy.size
Ajouté dans : v16.5.0
- Type : <Function>
Class: TextEncoderStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v16.6.0 | Ajouté dans : v16.6.0 |
new TextEncoderStream()
Ajouté dans : v16.6.0
Crée une nouvelle instance de TextEncoderStream.
textEncoderStream.encoding
Ajouté dans : v16.6.0
- Type : <string>
L’encodage pris en charge par l’instance de TextEncoderStream.
textEncoderStream.readable
Ajouté dans : v16.6.0
- Type : <ReadableStream>
textEncoderStream.writable
Ajouté dans : v16.6.0
- Type : <WritableStream>
Class: TextDecoderStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est désormais exposée sur l’objet global. |
| v16.6.0 | Ajouté dans : v16.6.0 |
new TextDecoderStream([encoding[, options]])
Ajouté dans : v16.6.0
encoding<string> Identifie l’encodingque cette instance deTextDecoderprend en charge. Par défaut :'utf-8'.options<Object>fatal<boolean>truesi les échecs de décodage sont fatals.ignoreBOM<boolean> Lorsquetrue, leTextDecoderStreaminclura la marque d’ordre des octets dans le résultat décodé. Lorsquefalse, la marque d’ordre des octets sera supprimée de la sortie. Cette option n’est utilisée que lorsqueencodingest'utf-8','utf-16be'ou'utf-16le'. Par défaut :false.
Crée une nouvelle instance de TextDecoderStream.
textDecoderStream.encoding
Ajouté dans : v16.6.0
- Type : <string>
L’encodage pris en charge par l’instance de TextDecoderStream.
textDecoderStream.fatal
Ajouté dans : v16.6.0
- Type : <boolean>
La valeur sera true si les erreurs de décodage entraînent la levée d’une TypeError.
textDecoderStream.ignoreBOM
Ajouté dans: v16.6.0
- Type: <boolean>
La valeur sera true si le résultat du décodage inclut la marque d’ordre des octets.
textDecoderStream.readable
Ajouté dans: v16.6.0
- Type: <ReadableStream>
textDecoderStream.writable
Ajouté dans: v16.6.0
- Type: <WritableStream>
Class: CompressionStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v17.0.0 | Ajouté dans: v17.0.0 |
new CompressionStream(format)
[Historique]
| Version | Modifications |
|---|---|
| v21.2.0, v20.12.0 | Le format accepte désormais la valeur deflate-raw. |
| v17.0.0 | Ajouté dans: v17.0.0 |
format<string> Un parmi'deflate','deflate-raw', ou'gzip'.
compressionStream.readable
Ajouté dans: v17.0.0
- Type: <ReadableStream>
compressionStream.writable
Ajouté dans: v17.0.0
- Type: <WritableStream>
Class: DecompressionStream
[Historique]
| Version | Modifications |
|---|---|
| v18.0.0 | Cette classe est maintenant exposée sur l’objet global. |
| v17.0.0 | Ajouté dans: v17.0.0 |
new DecompressionStream(format)
[Historique]
| Version | Modifications |
|---|---|
| v21.2.0, v20.12.0 | Le format accepte désormais la valeur deflate-raw. |
| v17.0.0 | Ajouté dans: v17.0.0 |
format<string> Un parmi'deflate','deflate-raw', ou'gzip'.
decompressionStream.readable
Ajouté dans: v17.0.0
- Type: <ReadableStream>
decompressionStream.writable
Ajouté dans: v17.0.0
- Type: <WritableStream>
Consommateurs d'utilitaires
Ajouté dans : v16.7.0
Les fonctions de consommateur d'utilitaires fournissent des options courantes pour consommer des flux.
Elles sont accessibles en utilisant :
import {
arrayBuffer,
blob,
buffer,
json,
text,
} from 'node:stream/consumers';const {
arrayBuffer,
blob,
buffer,
json,
text,
} = require('node:stream/consumers');streamConsumers.arrayBuffer(stream)
Ajouté dans : v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Retourne : <Promise> Se réalise avec un
ArrayBuffercontenant le contenu complet du flux.
import { arrayBuffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { TextEncoder } from 'node:util';
const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');
const readable = Readable.from(dataArray);
const data = await arrayBuffer(readable);
console.log(`from readable: ${data.byteLength}`);
// Prints: from readable: 76const { arrayBuffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { TextEncoder } = require('node:util');
const encoder = new TextEncoder();
const dataArray = encoder.encode('hello world from consumers!');
const readable = Readable.from(dataArray);
arrayBuffer(readable).then((data) => {
console.log(`from readable: ${data.byteLength}`);
// Prints: from readable: 76
});streamConsumers.blob(stream)
Ajouté dans : v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Retourne : <Promise> Se réalise avec un <Blob> contenant le contenu complet du flux.
import { blob } from 'node:stream/consumers';
const dataBlob = new Blob(['hello world from consumers!']);
const readable = dataBlob.stream();
const data = await blob(readable);
console.log(`from readable: ${data.size}`);
// Prints: from readable: 27const { blob } = require('node:stream/consumers');
const dataBlob = new Blob(['hello world from consumers!']);
const readable = dataBlob.stream();
blob(readable).then((data) => {
console.log(`from readable: ${data.size}`);
// Prints: from readable: 27
});streamConsumers.buffer(stream)
Ajouté dans : v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Retourne : <Promise> Se réalise avec un <Buffer> contenant l’intégralité du contenu du flux.
import { buffer } from 'node:stream/consumers';
import { Readable } from 'node:stream';
import { Buffer } from 'node:buffer';
const dataBuffer = Buffer.from('hello world from consumers!');
const readable = Readable.from(dataBuffer);
const data = await buffer(readable);
console.log(`from readable: ${data.length}`);
// Affiche : from readable: 27const { buffer } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const { Buffer } = require('node:buffer');
const dataBuffer = Buffer.from('hello world from consumers!');
const readable = Readable.from(dataBuffer);
buffer(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Affiche : from readable: 27
});streamConsumers.json(stream)
Ajouté dans : v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Retourne : <Promise> Se réalise avec le contenu du flux analysé en tant que chaîne encodée en UTF-8 qui est ensuite passée via
JSON.parse().
import { json } from 'node:stream/consumers';
import { Readable } from 'node:stream';
const items = Array.from(
{
length: 100,
},
() => ({
message: 'hello world from consumers!',
}),
);
const readable = Readable.from(JSON.stringify(items));
const data = await json(readable);
console.log(`from readable: ${data.length}`);
// Affiche : from readable: 100const { json } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const items = Array.from(
{
length: 100,
},
() => ({
message: 'hello world from consumers!',
}),
);
const readable = Readable.from(JSON.stringify(items));
json(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Affiche : from readable: 100
});streamConsumers.text(stream)
Ajouté dans : v16.7.0
stream<ReadableStream> | <stream.Readable> | <AsyncIterator>- Retourne : <Promise> Réussit avec le contenu du flux analysé en tant que chaîne encodée en UTF-8.
import { text } from 'node:stream/consumers';
import { Readable } from 'node:stream';
const readable = Readable.from('Hello world from consumers!');
const data = await text(readable);
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27const { text } = require('node:stream/consumers');
const { Readable } = require('node:stream');
const readable = Readable.from('Hello world from consumers!');
text(readable).then((data) => {
console.log(`from readable: ${data.length}`);
// Prints: from readable: 27
});