Kokius operatorius žinote dirbant su srautais?
sobes.tech AI
Atsakymas iš AI
Duomenų srautų valdymo operatoriai, ypač aktualūs asinchroninio programavimo ir reaktyvių bibliotekų (pvz., RxJS) kontekste, gali būti suskirstyti į kelias kategorijas:
Kūrimo operatoriai (Creation Operators): naudojami naujo srauto kūrimui:
of(): sukuria srautą, kuris išleidžia tam tikrą reikšmių rinkinį:// Iš RxJS import { of } from 'rxjs'; const source = of(1, 2, 3); // Srautas, išleidžiantis 1, 2, 3from(): paverčia įvairius šaltinius (Promise, Iterable, ArrayLike) į srautą:// Iš RxJS import { from } from 'rxjs'; const source = from([10, 20, 30]); // Srautas iš masyvointerval(): sukuria srautą, kuris išleidžia seką skaičių tam tikru laiko intervalu:// Iš RxJS import { interval } from 'rxjs'; const source = interval(1000); // Srautas, išleidžiantis skaičius kas sekundętimer(): sukuria srautą, kuris išleidžia vieną reikšmę po nustatyto laiko, taip pat gali išleisti seką reikšmių intervalais:fromEvent(): sukuria srautą iš DOM įvykių arba EventEmitter:
Transformacijos operatoriai (Transformation Operators): keičia srauto išleidžiamas reikšmes:
map(): keičia kiekvieną reikšmę, taikydamas nurodytą funkciją:// Iš RxJS import { of } from 'rxjs'; import { map } from 'rxjs/operators'; const source = of(1, 2, 3); const result = source.pipe(map(x => x * 2)); // Srautas, išleidžiantis 2, 4, 6pluck(): ištraukia savybę iš kiekvieno objekto sraute:scan(): taiko akumuliacinę funkciją ir išleidžia tarpinį rezultatą:mergeMap()/flatMap(): kiekvieną reikšmę paverčia nauju srautu ir sujungia juos:// Iš 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'))); // Srautas, išleidžiantis '1a', '1b', '2a', '2b'switchMap(): keičiant reikšmę, nutraukia ankstesnį srautą:concatMap(): vykdo srautus eilės tvarka:
Filtravimo operatoriai (Filtering Operators): atrenka reikšmes:
filter(): leidžia tik toms reikšmėms, kurios atitinka sąlygą:// Iš 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)); // Išleidžia 2, 4take(): leidžia tik pirmus N reikšmių:takeUntil(): leidžia reikšmes, kol kitas srautas išleidžia reikšmę:skip(): praleidžia pirmas N reikšmių:debounceTime(): išleidžia reikšmę tik po to, kai srautas nustoja keistis tam tikru laiku:distinctUntilChanged(): išleidžia tik reikšmę, kuri skiriasi nuo ankstesnės:
Kombinavimo operatoriai (Combination Operators): sujungia kelis srautus:
combineLatest(): sujungia paskutines reikšmes iš visų srautų:zip(): sujungia reikšmes pagal indeksą:merge(): sujungia srautus, išleidžiant reikšmes jų atsiradimo tvarka:concat(): vykdo srautus eilės tvarka:
Klaidų valdymo operatoriai (Error Handling Operators): tvarko klaidas:
catchError(): gaudo klaidą ir gali tęsti arba pakeisti srautą:// Iš RxJS import { throwError } from 'rxjs'; import { catchError, of } from 'rxjs/operators'; const source = throwError(() => new Error('Kažkas įvyko')); const result = source.pipe(catchError(err => of('Klaida pagauta'))); // Srautas, išleidžiantis 'Klaida pagauta'retry(): pakartoja srautą N kartų klaidos atveju:
Užbaigimo operatoriai (Completion Operators): nustato, ką daryti, kai srautas baigiasi:
finalize(): atlieka veiksmą pabaigoje arba atšaukimo metu:tap(): atlieka šalutinius efektus (pvz., logavimą):
Tai nėra pilnas, bet svarbus operatorių sąrašas, dažnai naudojamas frontend kūrime, ypač taikant reaktyvų požiūrį.