- Temat : Podczas subskrybowania zawsze pobiera dane, które są wysyłane po subskrypcji, tj. Poprzednie przekazane wartości nie są odbierane .
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);
W tym przykładzie, oto wynik, który zostanie wydrukowany w konsoli:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Zwróć uwagę, że subskrypcje, które przychodzą późno, nie obejmują niektórych danych, które zostały przesłane do tematu.
- Powtórz tematy : może pomóc, zachowując bufor poprzednich wartości, które zostaną wyemitowane do nowych subskrypcji.
Oto przykład użycia tematów powtórek, w których buffer of 2 previous values
są przechowywane i emitowane przy nowych subskrypcjach:
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);
});
Oto, co daje nam to na konsoli:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Tematy dotyczące zachowania : są podobne do tematów powtórek, ale ponownie wyemitują tylko ostatnią emitowaną wartość lub wartość domyślną, jeśli żadna wartość nie została wcześniej wyemitowana:
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);
});
A wynik:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Źródła: https://alligator.io/rxjs/subjects/