58. Introduction aux Subjects (Multicasting)
Les Observables standards sont unicast (ou "froids") : chaque abonné obtient sa propre exécution indépendante de la logique de l'Observable (ex : chaque abonné HTTP déclenche une nouvelle requête).
Les Subjects sont un type spécial d'Observable dit multicast (ou "chaud") : ils permettent à plusieurs Observers de s'abonner à la même exécution. Un Subject est à la fois un Observer (il peut recevoir des valeurs via next()) et un Observable (on peut s'y abonner).
Subject basique (Subject<T>)
Un Subject basique est un flux qui ne conserve pas d'état. Il n'émet des valeurs qu'aux abonnés qui écoutent au moment où la valeur est émise.
Cas d'usage : Émetteurs d'événements dans les services pour la communication entre composants non liés (remplaçant l' EventEmitter d'Angular dans les services).
typescript import { Subject } from 'rxjs';
const statusUpdate$ = new Subject
// L'abonné A commence à écouter statusUpdate$.subscribe(message => console.log('Sub A:', message));
// Le flux émet une valeur statusUpdate$.next('Système initialisé'); // Sortie : Sub A: Système initialisé
// L'abonné B commence à écouter plus tard statusUpdate$.subscribe(message => console.log('Sub B:', message));
statusUpdate$.next('Utilisateur connecté'); /* Sortie : Sub A: Utilisateur connecté Sub B: Utilisateur connecté */
statusUpdate$.complete(); // Termine le flux pour tous les abonnés
Crucial : Si l'abonné B s'était abonné après l'émission de 'Système initialisé', il aurait manqué ce message. La leçon suivante présente les Subjects qui stockent un état.