toArray - Convertir des valeurs en tableau
L'opérateur toArray collecte toutes les valeurs émises jusqu'à ce qu'un Observable se termine en un seul tableau et l'émet. Il est utile pour les traitements par lots, l'affichage de l'interface utilisateur après une récupération en masse, l'agrégation, etc.
🔰 Syntaxe et comportement de base
ts
import { of } from 'rxjs';
import { toArray } from 'rxjs';
of(1, 2, 3).pipe(
toArray()
).subscribe(console.log);
// Sortie :
// [1, 2, 3]Toutes les valeurs sont rassemblées dans un tableau unique et émises lorsque l'Observable se termine.
🌐 Documentation officielle RxJS - toArray
💡 Cas d'utilisation typiques
Il peut être utilisé lorsque vous souhaitez traiter plusieurs résultats asynchrones ensemble ou les afficher à l'interface utilisateur par lots.
ts
import { interval, of } from 'rxjs';
import { take, toArray, delayWhen, delay } from 'rxjs';
interval(500)
.pipe(
take(5),
delayWhen((val) => of(val).pipe(delay(val * 200))),
toArray()
)
.subscribe((result) => {
console.log('Reçu en une seule fois à l\'achèvement :', result);
});
// Sortie :
// Reçu en une seule fois à l'achèvement : [0, 1, 2, 3, 4]🧪 Exemple de code pratique (avec interface utilisateur)
ts
import { interval } from 'rxjs';
import { take, toArray } from 'rxjs';
// Zone d'affichage de la sortie
const toArrayOutput = document.createElement('div');
toArrayOutput.innerHTML = '<h3>Exemple de toArray :</h3>';
document.body.appendChild(toArrayOutput);
// Zone d'affichage des valeurs individuelles
const individualValues = document.createElement('div');
individualValues.innerHTML = '<h4>Valeurs individuelles :</h4>';
toArrayOutput.appendChild(individualValues);
// Zone d'affichage du résultat du tableau
const arrayResult = document.createElement('div');
arrayResult.innerHTML = '<h4>Résultat du tableau :</h4>';
arrayResult.style.marginTop = '20px';
toArrayOutput.appendChild(arrayResult);
// S'abonner à des valeurs individuelles
interval(500)
.pipe(take(5))
.subscribe((val) => {
const valueItem = document.createElement('div');
valueItem.textContent = `Valeur : ${val}`;
individualValues.appendChild(valueItem);
});
// S'abonner au même flux en tant que tableau
interval(500)
.pipe(take(5), toArray())
.subscribe((array) => {
const resultItem = document.createElement('div');
resultItem.textContent = `Résultat tableau : [${array.join(', ')}]`;
resultItem.style.fontWeight = 'bold';
resultItem.style.padding = '10px';
resultItem.style.backgroundColor = '#f5f5f5';
resultItem.style.borderRadius = '5px';
arrayResult.appendChild(resultItem);
// Affichage individuel des éléments du tableau
const arrayItems = document.createElement('div');
arrayItems.style.marginTop = '10px';
array.forEach((item, index) => {
const arrayItem = document.createElement('div');
arrayItem.textContent = `array[${index}] = ${item}`;
arrayItems.appendChild(arrayItem);
});
arrayResult.appendChild(arrayItems);
});✅ Résumé
toArrayémet toutes les valeurs sous forme de tableau à la fin- Idéal pour les situations où vous voulez agréger et gérer le flux entier
- Combiné avec
concatMap,delay, etc., il peut aussi gérer le traitement par lots de séquences asynchrones