Koje operatore za rad sa tokovima poznajete?
sobes.tech АИ
Одговор од АИ
Operatori za rad sa tokovima podataka, posebno relevantni u kontekstu asinhronog programiranja i reaktivnih biblioteka (poput RxJS), mogu se podeliti u nekoliko kategorija.
Operatori za kreiranje (Creation Operators): Koriste se za kreiranje novog toka podataka.
of(): Kreira tok koji emituje fiksni skup vrednosti.// Iz RxJS import { of } from 'rxjs'; const source = of(1, 2, 3); // Tok koji emituje 1, 2, 3from(): Pretvara različite izvore podataka (Promise, Iterable, ArrayLike) u tok.// Iz RxJS import { from } from 'rxjs'; const source = from([10, 20, 30]); // Tok iz nizainterval(): Kreira tok koji emituje sekvencijalne brojeve u datom vremenskom intervalu.// Iz RxJS import { interval } from 'rxjs'; const source = interval(1000); // Tok koji emituje brojeve svake sekundetimer(): Kreira tok koji emituje jednu vrednost nakon određenog vremena, sa mogućnošću emitovanja narednih vrednosti u intervalu.fromEvent(): Kreira tok iz DOM događaja ili EventEmitter-a.
Transformacioni operatori (Transformation Operators): Mijenjaju vrednosti koje tok emituje.
map(): Pretvara svaku vrednost emitovanu iz toka primenom zadane funkcije.// Iz 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 sa vrednostima 2, 4, 6pluck(): Izvlači svojstvo iz svakog objekta emitovanog iz toka.scan(): Primjenjuje akumulatorsku funkciju na svaku vrednost i emituje međurezultate.mergeMap()/flatMap(): Projektuje svaku vrednost originalnog toka u novi tok (Inner Observable) i spaja ih.// Iz 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'))); // Vrednosti '1a', '1b', '2a', '2b'switchMap(): SličnomergeMap, ali pri emitovanju nove vrednosti iz glavnog toka, otkazuje rad prethodnog unutrašnjeg toka.concatMap(): SličnomergeMap, ali garantuje da će unutrašnji tokovi biti izvršeni redom njihovog kreiranja.
Operatori filtracije (Filtering Operators): Izbiraju vrednosti koje će proći.
filter(): Propušta samo one vrednosti koje zadovoljavaju uslov.// Iz 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)); // Vrednosti 2, 4take(): Propušta samo prvih N vrednosti.takeUntil(): Propušta vrednosti dok drugi tok ne emituje vrednost.skip(): Preskače prvih N vrednosti.debounceTime(): Emituje vrednost tek nakon što je tok prestao emitovati vrednosti tokom zadatog vremena.distinctUntilChanged(): Emituje vrednost samo ako se razlikuje od prethodne.
Kombinacioni operatori (Combination Operators): Spajaju više tokova u jedan.
combineLatest(): Spaja poslednje vrednosti iz više tokova i emituje ih pri svakoj promeni.zip(): Paruje vrednosti iz više tokova po indeksu.merge(): Spaja više tokova, emitujući vrednosti kako pristižu.concat(): Sekvencijalno spaja tokove.
Operatori za rukovanje greškama (Error Handling Operators): Određuju ponašanje u slučaju grešaka.
catchError(): Hvata grešku i omogućava nastavak ili zamenu toka.// Iz RxJS import { throwError } from 'rxjs'; import { catchError, of } from 'rxjs/operators'; const source = throwError(() => new Error('Nešto je pošlo po zlu')); const result = source.pipe(catchError(err => of('Greška je uhvaćena'))); // Tok sa vrednošću 'Greška je uhvaćena'retry(): Pokušava ponovo pretplatiti se na tok N puta u slučaju greške.
Operatori za završetak (Completion Operators): Određuju ponašanje pri završetku toka.
finalize(): Izvršava zadatu radnju pri završetku (uspešnom ili sa greškom) ili otkazivanju pretplate.tap(): Omogućava izvršavanje sporednih efekata (npr. logovanje) bez promene vrednosti.
Ovo je samo kratak, ali važan spisak operatora sa kojima se često radi u frontend razvoju, posebno pri korišćenju reaktivnog pristupa.