Czym jest Subject w bibliotece RxJS? Subject to typ Observable, który pozwala emitować wartości do wielu obserwatorów w tym samym momencie. Jeśli szukaj informacji o Observable, zapoznaj się z tym wpisem. Alternatywą dla Subject jest BehaviorSubject, ReplaySubject, AsyncSubject oraz WebSocketSubject. Każdy z nich ma nieco inne zachowanie przez co jest wykorzystywany w różnych sytuacjach.
Subject
Podstawowym tworem jest Subject, który emituje wartości od razu po jej otrzymaniu oraz nie przechowuje wartości. Działanie możesz zobaczyć na poniższym przykładzie: dane są doklejane do zmiennej dopiero po rozpoczęciu subskrybowania zmiennej subject.
BehaviorSubject
Kolejnym przykładem (chyba najczęściej używanym) jest BehaviorSubject. Podstawową różnicą, którą zawuażysz już przy tworzeniu tego typu Observable jest to, że musisz podać wartość początkową. Jeśli zasubskrybujesz BehaviorSubject bez ustawiania na nim innej wartości, otrzymasz wartość z momentu inicjalizacji.
Kolejną właściwością BehaviorSubject jest metoda getValue
, która pozwala na pobranie ostatniej wartości bez subskrybowania jej. Przykład użycia zobaczysz na poniższym przykładzie. Zauważ, że w porównaniu do poprzedniego przykładu zmienne przechowujące wartości w subskrypcji zmieniły się o wartość sprzed zasubskrybowania subjecta.
ReplaySubject
ReplaySubject to kolejne rozszerzenie Subject i BehaviorSubject. Od BehaviorSubject różni go to, że zamiast deklaracji wartości początkowej podajemy liczbę wartości, które ma być pamiętana. W poniższym przykładzie zostanie pominięte this.subject.next('1');
ponieważ przy tworzeniu zmiennej deklarujemy, że ma 'pamiętać’ trzy ostatnie wartości: subject = new ReplaySubject(3);
Drugim parametrem ReplaySubject jest czas w milisekundach przez który wartości mają być przechowywane.
AsyncSubject
Działanie AsyncSubject może Cię zaskoczyć: ostatnia wartość jest emitowana dopiero po zamknięciu strumienia. Na poniższym przykładzie, pomimo zasubskrybowaniu zmiennej subject
przypisanie do stringa wartości następuje dopiero po wywołaniu metody complete
WebSocketSubject
W przypadku tworzenia zmiennej WebSocketSubject jako parametr podajemy URL websocket’a. Po zasubskrybowaniu się na tej zmiennej zaczniemy otrzymywać dane z websocket’u, zaś metoda next
służy do wysyłania informacji.