Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 3279|Απάντηση: 2

[Άλλα] RxJS σχετικά με τη διαφορά μεταξύ firstValueFrom και lastValueFrom

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2024-8-6 11:19:02 | | | |
Απαιτήσεις: Το έργο πρέπει να μετατρέψει τα Παρατηρήσιμα σε Υποσχέσεις και να περιμένει την ολοκλήρωσή του και όταν χρησιμοποιείτε τη μέθοδο toPromise() σε ένα έργο Angular, η υπόδειξη έχει καταργηθεί και, στη συνέχεια, συνιστάται η χρήση των στατικών μεθόδων firstValueFrom ή lastValueFrom.



Γιατί να καταργήσετε τη μέθοδο toPromise();

Επειδή το όνομα της μεθόδου toPromise() δεν υποδεικνύει ποτέ ποια εκπεμπόμενη τιμή θα επιλύσει η Υπόσχεση, επειδή τα Παρατηρήσιμα μπορούν να παράγουν πολλές τιμές με την πάροδο του χρόνου. Κατά τη μετατροπή σε υπόσχεση, μπορεί να θέλετε να επιλέξετε εάν θέλετε να επιλέξετε την πρώτη τιμή που θα φτάσει ή την τελευταία τιμή. Για να λύσουμε όλα αυτά τα προβλήματα, αποφασίσαμε να καταργήσουμε την toPromise() και να εισαγάγουμε δύο νέες βοηθητικές συναρτήσεις για τη μετατροπή σε υποσχέσεις.

Απλά καταλάβετεΤα παρατηρήσιμα παράγουν πολλαπλές τιμέςΚαι μετάΟι υποσχέσεις θα οδηγήσουν μόνο σε μία αξίαΣτη συνέχεια, ορισμένοι χρήστες θέλουν να χρησιμοποιήσουν την πρώτη τιμή και ορισμένοι χρήστες θέλουν να χρησιμοποιήσουν την τελευταία τιμή, ώστε να εμφανιστούν οι firstValueFrom και lastValueFrom. (Σημείωση: toPromise() είναι η τελευταία τιμή για τη λήψη των παρατηρήσιμων

firstValueΑπό παράδειγμα

Μπορεί να θέλετε να λάβετε την πρώτη τιμή όταν φτάσει χωρίς να περιμένετε να ολοκληρωθεί το Παρατηρήσιμο, ώστε να μπορείτε να χρησιμοποιήσετε το firstValueFrom. Το firstValueFrom θα επιλύσει την Υπόσχεση με την πρώτη τιμή που εκπέμπεται από το Παρατηρήσιμο και θα διαγραφεί αμέσως για να διατηρήσει τον πόρο. Εάν το Παρατηρήσιμο ολοκληρωθεί χωρίς να εκπέμψει καμία τιμή, το firstValueFrom θα απορριφθεί επίσης με ένα EmptyError.



lastValueFrom παράδειγμα

Το lastValueFrom είναι σχεδόν πανομοιότυπο με το toPromise(), που σημαίνει ότι θα αναλυθεί με την τελευταία τιμή που επιτεύχθηκε όταν ολοκληρωθεί το Παρατηρήσιμο, αλλά συμπεριφέρεται διαφορετικά όταν το Παρατηρήσιμο ολοκληρωθεί χωρίς να εκπέμψει ούτε μία τιμή. Όταν το Παρατηρήσιμο ολοκληρωθεί χωρίς να ενεργοποιηθεί, η toPromise() θα επιλυθεί με επιτυχία σε undefined (έτσι αλλάζει ο τύπος επιστροφής) και η lastValueFrom θα απορριφθεί ως EmptyError. Επομένως, ο τύπος επιστροφής του lastValueFrom είναι Promise<T>, όπως και το toPromise() στο RxJS 6.





Παράδειγμα ανάλυσης

Στο RxJS, το διάστημα(1000) δημιουργεί ένα παρατηρήσιμο που εκπέμπει μια αυξητική ακολουθία αριθμών κάθε 1000 χιλιοστά του δευτερολέπτου (δηλαδή, 1 δευτερόλεπτο), ξεκινώντας από το 0.

Στη συνέχεια, το .pipe(take(10)) είναι μια αλυσίδα τελεστών που περιορίζει τον αριθμό των στοιχείων που εκπέμπει το Παρατηρήσιμο. Εδώ, take(10) σημαίνει ότι λαμβάνονται μόνο οι τιμές των πρώτων 10 που εκπέμπονται.

Ας εξηγήσουμε λεπτομερώς αυτήν την έκφραση:

interval(1000): Δημιουργήστε ένα παρατηρήσιμο που εκπέμπει έναν αριθμό κάθε 1 δευτερόλεπτο. Η ακολουθία αριθμών ξεκινά από το 0 και αυξάνεται κατά 1 κάθε φορά.

.pipe(take(10)): Χρησιμοποιήστε τη μέθοδο .pipe() για να συνδέσετε πολλούς τελεστές. Εδώ χρησιμοποιούμε τον τελεστή take(10), ο οποίος περιορίζει το Παρατηρήσιμο να εκπέμπει μόνο τις πρώτες 10 τιμές.

Έλεγχος για σφάλματα EmptyError

Ο κωδικός έχει ως εξής:


ή




Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Τα αποτελέσματα ερωτήματος γραμμής εντολών MySQL επιστρέφουν ? ερωτηματικό
Επόμενος:Η σειρά Angular 18 (είκοσι δύο) εισάγει τη βιβλιοθήκη εικονιδίων FontAwesome
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-8-6 11:21:09 |
Εάν χρησιμοποιείτε lastValueFrom ή firstValueFrom στο Angular HTTP, είναι ισοδύναμο, δεν υπάρχει διαφορά, δηλαδή μπορείτε να χρησιμοποιήσετε οποιοδήποτε από τα δύο.
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2024-10-16 21:44:52 |
Εάν επιστρέψετε την of() μπορεί να λάβετε μια εξαίρεση χωρίς στοιχεία στην ακολουθία, το lastValueFrom παίρνει τώρα την παράμετρο διαμόρφωσης ως δεύτερη παράμετρο και μπορείτε να καθορίσετε την προεπιλεγμένη τιμή που θα εκπέμπει όταν το παρατηρήσιμο είναι κενό:

Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com