Milliseid operaatoreid teate voogudega töötamiseks?
sobes.tech AI
Vastus AI-lt
Andmevoogude ja operaatoreid, mis on eriti olulised asünkroonse programmeerimise ja reaktiivsete raamatukogude (näiteks RxJS) kontekstis, võib jagada mitmeks kategooriaks:
Loomise operaatoreid (Creation Operators): kasutatakse uue voo loomisel:
of(): loob voo, mis väljastab kindla väärtuste kogumi:// RxJS-ist import { of } from 'rxjs'; const source = of(1, 2, 3); // Voo, mis väljastab 1, 2, 3from(): muudab erinevad allikad (Promise, Iterable, ArrayLike) voo:// RxJS-ist import { from } from 'rxjs'; const source = from([10, 20, 30]); // Massiivist voointerval(): loob voo, mis väljastab järjestikuseid numbreid määratud ajaintervallil:// RxJS-ist import { interval } from 'rxjs'; const source = interval(1000); // Voo, mis väljastab numbreid iga sekundi järeltimer(): loob voo, mis väljastab ühe väärtuse pärast määratud aega ning võib ka järgnevaid väärtusi intervalliga:fromEvent(): loob voo DOM-i sündmustest või EventEmitterist:
Transformatsiooni operaatoreid (Transformation Operators): muudavad voo väljastatavaid väärtusi:
map(): muudab iga väärtuse, rakendades sellele määratud funktsiooni:// RxJS-ist import { of } from 'rxjs'; import { map } from 'rxjs/operators'; const source = of(1, 2, 3); const result = source.pipe(map(x => x * 2)); // Voo, mis väljastab 2, 4, 6pluck(): tõmbab iga objekti omaduse:scan(): rakendab akumuleerivat funktsiooni ja väljastab vahepealsed tulemused:mergeMap()/flatMap(): iga väärtuse jaoks loob uue voo ja ühendab need:// RxJS-ist 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'))); // Voo, mis väljastab '1a', '1b', '2a', '2b'switchMap(): uue väärtuse väljastamisel katkestab eelneva voo:concatMap(): teostab vood järjekorras:
Filtreerimise operaatoreid (Filtering Operators): valib väärtusi:
filter(): laseb läbi ainult need väärtused, mis vastavad tingimusele:// RxJS-ist 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)); // Väljastab 2, 4take(): laseb läbi ainult esimesed N väärtust:takeUntil(): laseb läbi kuni teine voog väljastab väärtuse:skip(): jätab vahele esimesed N väärtust:debounceTime(): väljastab väärtuse ainult pärast seda, kui voog on teatud aja jooksul muutumatuks jäänud:distinctUntilChanged(): väljastab ainult siis, kui väärtus erineb eelmisest:
Kombineerimisoperaatoreid (Combination Operators): ühendavad mitu voogu:
combineLatest(): ühendab viimased väärtused kõigist voogudest:zip(): ühendab väärtused indeksite järgi:merge(): ühendab voogud, väljastades väärtused nende tekkimise ajal:concat(): teostab voogud järjest:
Vigade käsitlemise operaatoreid (Error Handling Operators): haldab vigu:
catchError(): püüab vea ja võib jätkata või asendada teise vooga:// RxJS-ist import { throwError } from 'rxjs'; import { catchError, of } from 'rxjs/operators'; const source = throwError(() => new Error('Midagi läks valesti')); const result = source.pipe(catchError(err => of('Viga püüti'))); // Voo, mis väljastab 'Viga püüti'retry(): proovib uuesti ühendust luua N korda vea korral:
Lõpetamise operaatoreid (Completion Operators): määrab, mida teha, kui voog lõpeb:
finalize(): teostab tegevuse lõpus või tühistamisel:tap(): teostab kõrvaltoimeid (nt logimine):
See operaatoreid ei ole täielik, kuid see on oluline ja sageli kasutatav frontend arenduses, eriti reaktiivse lähenemise kasutamisel.