Aké operátory pre prácu s tokmi poznáte?
sobes.tech AI
Odpoveď od AI
Operátory pre práce s tokmi dát, obzvlášť aktuálne v kontexte asynchrónneho programovania a reaktívnych knižníc (napríklad RxJS), možno rozdeliť do niekoľkých kategórií.
Operátory tvorby (Creation Operators): Používajú sa na vytvorenie nového dátového toku.
of(): Vytvára tok, ktorý vydáva pevne stanovenú sadu hodnôt.// Z RxJS import { of } from 'rxjs'; const source = of(1, 2, 3); // Tok, ktorý vydáva 1, 2, 3from(): Premení rôzne zdroje dát (Promise, Iterable, ArrayLike) na tok.// Z RxJS import { from } from 'rxjs'; const source = from([10, 20, 30]); // Tok z poľainterval(): Vytvára tok, ktorý vydáva sekvenčné čísla v danom časovom intervale.// Z RxJS import { interval } from 'rxjs'; const source = interval(1000); // Tok, ktorý vydáva čísla každú sekundutimer(): Vytvára tok, ktorý vydá jednu hodnotu po stanovenom čase, s možnosťou ďalších hodnôt v intervale.fromEvent(): Vytvára tok z DOM udalostí alebo EventEmitteru.
Transformačné operátory (Transformation Operators): Menia hodnoty, ktoré tok vydáva.
map(): Prevod každej hodnoty, ktorú tok vydáva, pomocou zadané funkcie.// 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)); // Tok s hodnotami 2, 4, 6pluck(): Vyberá vlastnosť z každého objektu, ktorý tok vydáva.scan(): Aplikuje akumulátorovú funkciu na každú hodnotu a vydáva medzivýsledky.mergeMap()/flatMap(): Projektuje každú hodnotu pôvodného toku do nového toku (Inner Observable) a ich spája.// 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'))); // Hodnoty '1a', '1b', '2a', '2b'switchMap(): PodobnémergeMap, ale pri vydaní novej hodnoty z hlavného toku, zruší predchádzajúci vnútorný tok.concatMap(): PodobnémergeMap, ale garantuje, že vnútorné toky budú vykonané sekvenčne podľa ich vytvorenia.
Filtračné operátory (Filtering Operators): Vyberajú hodnoty, ktoré majú prejsť.
filter(): Propustí iba tie hodnoty, ktoré spĺňajú podmienku.// 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)); // Hodnoty 2, 4take(): Propustí iba prvých N hodnôt.takeUntil(): Propustí hodnoty, kým iný tok nevydá hodnotu.skip(): Preskočí prvých N hodnôt.debounceTime(): Vydá hodnotu až po tom, čo tok prestane vydávať hodnoty počas stanoveného času.distinctUntilChanged(): Vydá hodnotu iba ak sa líši od predchádzajúcej.
Kombinačné operátory (Combination Operators): Spájajú viac tokov do jedného.
combineLatest(): Spojí posledné hodnoty z viacerých tokov a vydáva ich pri každej zmene.zip(): Páruje hodnoty z viacerých tokov podľa indexu.merge(): Spája viac tokov, vydáva ich hodnoty ako prichádzajú.concat(): Sekvenčne spája toky.
Operátory pre spracovanie chýb (Error Handling Operators): Určujú správanie pri chybách.
catchError(): Zachytí chybu a umožní pokračovať alebo nahradiť tok iným.// Z RxJS import { throwError } from 'rxjs'; import { catchError, of } from 'rxjs/operators'; const source = throwError(() => new Error('Niečo sa pokazilo')); const result = source.pipe(catchError(err => of('Chyba zachytená'))); // Tok s hodnotou 'Chyba zachytená'retry(): Pokúsi sa znovu prihlásiť k toku N-krát pri chybe.
Operátory ukončenia (Completion Operators): Určujú správanie pri ukončení toku.
finalize(): Vykoná zadanú akciu pri ukončení (úspešnom alebo s chybou) alebo zrušení odberu.tap(): Umožňuje vykonávať vedľajšie efekty (napríklad logovanie) bez zmeny hodnôt.
Toto je len stručný, ale dôležitý zoznam operátorov, s ktorými sa často pracuje vo frontendovom vývoji, najmä pri použití reaktívneho prístupu.