- Тема : Після підписки він завжди отримує дані, які надсилаються після його підписки, тобто попередні висунуті значення не надходять .
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);
На цьому прикладі ось результат, який буде надруковано на консолі:
From subscription 1: 2
From subscription 1: 3
From subscription 2: 3
From subscription 2: 4
Зверніть увагу, як підписки, які надходять із запізненням, відсутні на деяких даних, які були внесені до теми.
- Повтор предметів : може допомогти, зберігаючи буфер попередніх значень, які будуть передані в нові підписки.
Ось приклад використання для предметів відтворення, де а buffer of 2 previous values
зберігаються та випромінюються під час нових підписок:
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);
});
Ось що нам дає на консолі:
From 1st sub: 3
From 1st sub: 4
From 1st sub: 5
From 2nd sub: 4
From 2nd sub: 5
- Предмети поведінки : схожі на суб'єкти, що відтворюються, але будуть повторно випромінювати лише останнє випромінене значення або значення за замовчуванням, якщо раніше не було випущено жодне значення:
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);
});
І результат:
From 1st sub: Hey now!
From 1st sub: 5
From 2nd sub: 5
Довідка: https://alligator.io/rxjs/subjects/