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