Sobes.tech
Middle

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, 3
    
  • from(): muudab erinevad allikad (Promise, Iterable, ArrayLike) voo:
    // RxJS-ist
    import { from } from 'rxjs';
    
    const source = from([10, 20, 30]); // Massiivist voo
    
  • interval(): 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ärel
    
  • timer(): 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, 6
    
  • pluck(): 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, 4
    
  • take(): 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.