- Oggetto : Al momento della sottoscrizione ottiene sempre i dati che vengono inviati dopo la sua sottoscrizione, ovvero i valori inviati in precedenza non vengono ricevuti .
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);
Con questo esempio, ecco il risultato che verrà stampato nella console:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Nota come gli abbonamenti che arrivano in ritardo perdono alcuni dei dati che sono stati inseriti nell'argomento.
- Replay soggetti : può aiutare mantenendo un buffer dei valori precedenti che verranno emessi ai nuovi abbonamenti.
Ecco un esempio di utilizzo per gli argomenti di replay in cui buffer of 2 previous values
vengono conservati ed emessi su nuovi abbonamenti:
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);
});
Ecco cosa ci offre alla console:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Soggetti comportamentali : sono simili ai soggetti replay, ma riemetteranno solo l'ultimo valore emesso, o un valore predefinito se non è stato emesso alcun valore in precedenza:
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);
});
E il risultato:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Riferimento: https://alligator.io/rxjs/subjects/