Кадом операторҳоро барои кор бо ҷараёнҳо медонед?
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, 6pluck(): Хусусиятро аз ҳар объекти, ки ҷараён мебарорад, мебарад.scan(): Функсияи акумуляториро ба ҳар арзиш татбиқ мекунад ва натиҷаҳои миёнаравиро мебарорад.mergeMap()/flatMap(): Ҳар арзиши ҷараёни аслӣ ба ҷараёни нав (Inner Observable) табдил медиҳад ва онҳоро мепайвандад.// Аз 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(): Иҷрои таъсироти тарафӣ (масалан, логгирӣ) бе тағир додани арзишҳо.
Ин танҳо рӯйхати кӯтоҳ, аммо муҳим аз операторҳо мебошад, ки дар пешрафти пеши фронтенд бо истифода аз усули реактивӣ бисёр истифода мешаванд.