Ποιας χειριστές γνωρίζετε για την εργασία με ροές;
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(): Διασφαλίζει ότι τα εσωτερικά ρεύματα εκτελούνται σειριακά.
Φιλτράρισμα (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(): Επιτρέπει την εκτέλεση παρενεργειών χωρίς να αλλάζει τις τιμές.
Αυτοί οι χειριστές, ειδικά στην ανάπτυξη frontend, χρησιμοποιούνται συχνά σε αντιδραστικές προσεγγίσεις.