Απαιτήσεις: Το έργο πρέπει να μετατρέψει τα Παρατηρήσιμα σε Υποσχέσεις και να περιμένει την ολοκλήρωσή του και όταν χρησιμοποιείτε τη μέθοδο 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
Ο κωδικός έχει ως εξής:
ή
Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή. |