Ի՞նչ օպերատորներ եք ճանաչում հոսքերի հետ աշխատելու համար։
sobes.tech AI
Պատասխան AI-ից
Օպերատորներ տվյալների հոսքերով աշխատելու համար, հատկապես արդիական են ասինխրոն ծրագրավորման և ռեակցիվ գրադարանների (օրինակ՝ RxJS) համատեքստում, կարելի է բաժանել մի քանի կատեգորիաների:
Ստեղծման օպերատորներ (Creation Operators): Օգտագործվում են նոր տվյալների հոսք ստեղծելու համար:
of(): Ստեղծում է հոսք, որը արձակում է որոշակի արժեքների հավաքածու:// RxJS-ից import { of } from 'rxjs'; const source = of(1, 2, 3); // Հոսք, որը արձակում է 1, 2, 3from(): Փոխում է տարբեր աղբյուրներ (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, 6pluck(): Հանում է հատկություն յուրաքանչյուր օբյեկտից հոսքում: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, 4take(): անցնում է միայն առաջին 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(): իրականացնում է կողմնակի ազդեցություններ՝ օրինակ՝ լոգավորում:
Սա ընդհանրապես ոչ ամբողջական, բայց կարևոր օպերատորների ցանկ է, որոնք հաճախ օգտագործվում են Ֆրոնտենդում, հատկապես ռեակցիվ մոտեցում կիրառելիս։