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(): ახალი მნიშვნელობის გამოყოფისას წინა ნაკადი გაუქმებულია:
  • concatMap(): ნაკადებს რიგრიგობით ახორციელებს:

ფილტრაციის ოპერატორები (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(): ახორციელებს გვერდით ეფექტებს (მაგალითად, ლოგირებას):

ეს ოპერატორების სია არ არის სრული, მაგრამ მნიშვნელოვანია და ხშირად გამოიყენება ფრონტენდში, განსაკუთრებით რეაქტიული მიდგომის გამოყენებისას।