Jakie operatory do pracy z przepływami znasz?
sobes.tech AI
Odpowiedź od AI
Operatory do pracy z strumieniami danych, szczególnie istotne w kontekście programowania asynchronicznego i bibliotek reaktywnych (np. RxJS), można podzielić na kilka kategorii.
Operatory tworzenia (Creation Operators): Służą do tworzenia nowego strumienia danych.
of(): Tworzy strumień emitujący ustalony zestaw wartości.// Z RxJS import { of } from 'rxjs'; const source = of(1, 2, 3); // Strumień emitujący 1, 2, 3from(): Zamienia różne źródła danych (Promise, Iterable, ArrayLike) na strumień.// Z RxJS import { from } from 'rxjs'; const source = from([10, 20, 30]); // Strumień z tablicyinterval(): Tworzy strumień emitujący kolejne liczby co określony czas.// Z RxJS import { interval } from 'rxjs'; const source = interval(1000); // Strumień emitujący liczby co sekundętimer(): Tworzy strumień emitujący jedno wartość po określonym czasie, opcjonalnie z kolejnymi wartościami co interwał.fromEvent(): Tworzy strumień z wydarzeń DOM lub EventEmitter.
Operatory transformacji (Transformation Operators): Modyfikują wartości emitowane przez strumień.
map(): Przekształca każdą wartość emitowaną przez strumień, stosując do niej funkcję.// Z RxJS import { of } from 'rxjs'; import { map } from 'rxjs/operators'; const source = of(1, 2, 3); const result = source.pipe(map(x => x * 2)); // Strumień z wartościami 2, 4, 6pluck(): Wydobywa właściwość z każdego obiektu emitowanego przez strumień.scan(): Akumuluje wartości, emitując pośrednie wyniki.mergeMap()/flatMap(): Projekcja każdego elementu na nowy strumień i łączenie ich w jeden. Pozwala na asynchroniczne operacje.// Z RxJS import { of } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; const source = of(1, 2); const result = source.pipe(mergeMap(val => of(val + 'a', val + 'b'))); // Strumień z wartościami '1a', '1b', '2a', '2b'switchMap(): Podobny domergeMap, ale anulowuje poprzedni wewnętrzny strumień przy emisji nowej wartości.concatMap(): Zapewnia, że wewnętrzne strumienie będą wykonywane kolejno.
Operatory filtrowania (Filtering Operators): Przepuszczają wybrane wartości.
filter(): Przepuszcza wartości spełniające warunek.// Z RxJS import { of } from 'rxjs'; import { filter } from 'rxjs/operators'; const source = of(1, 2, 3, 4); const result = source.pipe(filter(x => x % 2 === 0)); // Strumień z wartościami 2, 4take(): Przepuszcza pierwsze N wartości.takeUntil(): Przepuszcza wartości do momentu emisji z innego strumienia.skip(): Pomija pierwsze N wartości.debounceTime(): Emituje wartość po określonym czasie od ostatniej emisji.distinctUntilChanged(): Emituje wartość tylko jeśli różni się od poprzedniej.
Operatory łączenia (Combination Operators): Łączą kilka strumieni.
combineLatest(): Emisja ostatnich wartości z każdego strumienia przy zmianie któregokolwiek.zip(): Paruje wartości z różnych strumieni.merge(): Łączy strumienie, emitując wartości w kolejności pojawiania się.concat(): Łączy strumienie kolejno.
Operatory obsługi błędów (Error Handling Operators): Zarządzają błędami.
catchError(): Przechwytuje błąd i pozwala kontynuować lub zamienić strumień.// Z RxJS import { throwError } from 'rxjs'; import { catchError, of } from 'rxjs/operators'; const source = throwError(() => new Error('Coś poszło nie tak')); const result = source.pipe(catchError(err => of('Błąd przechwycony'))); // Strumień z wartością 'Błąd przechwycony'retry(): Powtarza subskrypcję N razy w przypadku błędu.
Operatory kończenia (Completion Operators): Określają zachowanie po zakończeniu.
finalize(): Wykonuje akcję po zakończeniu lub anulowaniu.tap(): Pozwala na efekt uboczny bez zmiany wartości.
To nie jest pełna lista, ale ważne operatory, z którymi często pracuje się w frontendzie, szczególnie w podejściu reaktywnym.