Sobes.tech
Middle

Ի՞նչ օպերատորներ եք ճանաչում հոսքերի հետ աշխատելու համար։

sobes.tech AI

Պատասխան AI-ից

Օպերատորներ տվյալների հոսքերով աշխատելու համար, հատկապես արդիական են ասինխրոն ծրագրավորման և ռեակցիվ գրադարանների (օրինակ՝ RxJS) համատեքստում, կարելի է բաժանել մի քանի կատեգորիաների:

Ստեղծման օպերատորներ (Creation Operators): Օգտագործվում են նոր տվյալների հոսք ստեղծելու համար:

  • of(): Ստեղծում է հոսք, որը արձակում է որոշակի արժեքների հավաքածու:
    // RxJS-ից
    import { of } from 'rxjs';
    
    const source = of(1, 2, 3); // Հոսք, որը արձակում է 1, 2, 3
    
  • from(): Փոխում է տարբեր աղբյուրներ (Promise, Iterable, ArrayLike) հոսք:
    // RxJS-ից
    import { from } from 'rxjs';
    
    const source = from([10, 20, 30]); // Հոսք՝ զանգվածից
    
  • interval(): Ստեղծում է հոսք, որը արձակում է հաջորդական թվեր նշված ժամանակային միջակայքով:
    // RxJS-ից
    import { interval } from 'rxjs';
    
    const source = interval(1000); // Հոսք՝ թվեր յուրաքանչյուր վայրկյան
    
  • timer(): Ստեղծում է հոսք, որը արձակում է մեկ արժեք նշված ժամանակից հետո, հնարավոր է նաև հաջորդական արժեքներ միջակայքով:
  • fromEvent(): Ստեղծում է հոսք DOM-իրադարձություններից կամ EventEmitter-ից:

Տրանսֆորմացիոն օպերատորներ (Transformation Operators): Փոխում են հոսքով արձակվող արժեքները:

  • map(): Փոխում է յուրաքանչյուր արժեք, կիրառելով նշված ֆունկցիա:
    // RxJS-ից
    import { of } from 'rxjs';
    import { map } from 'rxjs/operators';
    
    const source = of(1, 2, 3);
    const result = source.pipe(map(x => x * 2)); // Հոսք՝ 2, 4, 6
    
  • pluck(): Հանում է հատկություն յուրաքանչյուր օբյեկտից հոսքում:
  • scan(): Կիրառում է կուտակիչ ֆունկցիա և արձակում միջնորդական արդյունքներ:
  • mergeMap() / flatMap(): Դիտարկում է յուրաքանչյուր արժեքից նոր հոսք և միավորում (սահունացնում) դրանք մեկ հոսք:
    // 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'))); // Հոսք՝ '1a', '1b', '2a', '2b'
    
  • switchMap(): Դիտարկում է mergeMap, բայց նոր արժեք արձակելու ժամանակ նախորդ ներսի հոսքը դադարեցնում է:
  • concatMap(): Գործում է mergeMap-ի նման, բայց ապահովում է, որ ներսի հոսքերը կատարվեն հերթականությամբ:

Ֆիլտրի օպերատորներ (Filtering Operators): Ընտրովի կերպով անցնում են հոսքով արձակվող արժեքները:

  • filter(): անցնում է միայն այն արժեքները, որոնք բավարարում են պայմանին:
    // 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)); // Հոսք՝ 2, 4
    
  • take(): անցնում է միայն առաջին N արժեքները:
  • takeUntil(): անցնում է մինչև այլ հոսք արձակում է արժեք:
  • skip(): բաց է թողնում առաջին N արժեքները:
  • debounceTime(): արձակում է միայն այն արժեքը, որը հետո չի փոխվում նշված ժամանակահատվածում:
  • distinctUntilChanged(): արձակում է միայն այն արժեքը, որը տարբերվում է նախորդից:

Կոմբինացիոն օպերատորներ (Combination Operators): Միավորում են մի քանի հոսք:

  • combineLatest(): միավորում է վերջին արժեքները բոլոր հոսքերից:
  • zip(): միավորում է արժեքները ըստ ինդեքսի:
  • merge(): միավորում է հոսքերը՝ արձակելով արժեքները ըստ դրանց առաջացման ժամանակի:
  • concat(): միավորում է հոսքերը հերթականությամբ:

Համախմբման օպերատորներ (Error Handling Operators): Կարգավորում են սխալի դեպքում:

  • catchError(): բռնում է սխալը և կարող է շարունակել կամ փոխարինել հոսքը:
    // RxJS-ից
    import { throwError } from 'rxjs';
    import { catchError, of } from 'rxjs/operators';
    
    const source = throwError(() => new Error('Ինչ-որ բան սխալ է'));
    const result = source.pipe(catchError(err => of('Սխալը բռնվեց'))); // Հոսք՝ 'Սխալը բռնվեց'
    
  • retry(): կրկնում է հոսքը N անգամ սխալի դեպքում:

Ավարտման օպերատորներ (Completion Operators): Կարգավորում են հոսքի ավարտը:

  • finalize(): իրականացնում է գործողություն հոսքի ավարտին կամ չեղարկման ժամանակ:
  • tap(): իրականացնում է կողմնակի ազդեցություններ՝ օրինակ՝ լոգավորում:

Սա ընդհանրապես ոչ ամբողջական, բայց կարևոր օպերատորների ցանկ է, որոնք հաճախ օգտագործվում են Ֆրոնտենդում, հատկապես ռեակցիվ մոտեցում կիրառելիս։