- Objet : Lors de l'abonnement, il obtient toujours les données qui sont poussées après son abonnement, c'est-à-dire que les valeurs précédentes ne sont pas reçues .
const mySubject = new Rx.Subject();
mySubject.next(1);
const subscription1 = mySubject.subscribe(x => {
console.log('From subscription 1:', x);
});
mySubject.next(2);
const subscription2 = mySubject.subscribe(x => {
console.log('From subscription 2:', x);
});
mySubject.next(3);
subscription1.unsubscribe();
mySubject.next(4);
Avec cet exemple, voici le résultat qui sera imprimé dans la console:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Notez que les abonnements qui arrivent en retard manquent certaines des données qui ont été introduites dans le sujet.
- Rejouer des sujets : peut aider en gardant un tampon des valeurs précédentes qui seront émises aux nouveaux abonnements.
Voici un exemple d'utilisation pour les sujets de relecture où un buffer of 2 previous values
est conservé et émis sur les nouveaux abonnements:
const mySubject = new Rx.ReplaySubject(2);
mySubject.next(1);
mySubject.next(2);
mySubject.next(3);
mySubject.next(4);
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
Voici ce que cela nous donne sur la console:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Sujets de comportement : sont similaires aux sujets de relecture, mais ne réémettent que la dernière valeur émise, ou une valeur par défaut si aucune valeur n'a été émise auparavant:
const mySubject = new Rx.BehaviorSubject('Hey now!');
mySubject.subscribe(x => {
console.log('From 1st sub:', x);
});
mySubject.next(5);
mySubject.subscribe(x => {
console.log('From 2nd sub:', x);
});
Et le résultat:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Référence: https://alligator.io/rxjs/subjects/