Rodzaje Subject w RxJS

przez | 24 sierpnia 2021

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *