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(): Ҳар арзиши ҷараёни аслӣ ба ҷараёни нав (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, 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(): Иҷрои таъсироти тарафӣ (масалан, логгирӣ) бе тағир додани арзишҳо.

Ин танҳо рӯйхати кӯтоҳ, аммо муҳим аз операторҳо мебошад, ки дар пешрафти пеши фронтенд бо истифода аз усули реактивӣ бисёр истифода мешаванд.