Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 3279|Antwort: 2

[Sonstige] RxJS über den Unterschied zwischen firstValueFrom und lastValueFrom

[Link kopieren]
Veröffentlicht am 6.8.2024, 11:19:02 | | | |
Anforderungen: Das Projekt muss Observables in Promises umwandeln und auf den Abschluss warten, und wenn die toPromise()-Methode in einem Angular-Projekt verwendet wird, ist der Hinweis veraltet; dann wird empfohlen, die statischen Methoden firstValueFrom oder lastValueFrom zu verwenden.



Warum sollte man die toPromise()-Methode aufgeben?

Da der Name der toPromise()-Methode nie angibt, welchen emittierten Wert das Promise auflösen wird, da Observables im Laufe der Zeit mehrere Werte erzeugen können. Wenn Sie in ein Versprechen konvertieren, möchten Sie vielleicht entscheiden, ob Sie den ersten oder den letzten Wert auswählen. Um all diese Probleme zu lösen, haben wir beschlossen, toPromise() zu verwerten und zwei neue Helferfunktionen zur Umwandlung in Versprechen einzuführen.

Einfach verstehenObservablen erzeugen mehrere WerteUnd dannVersprechen führen nur zu einem WertDann wollen einige Nutzer den ersten Wert verwenden, andere den letzten Wert, sodass firstValueFrom und lastValueFrom erscheinen. (Hinweis: toPromise() ist der letzte Wert, um die Observablen zu erhalten

firstValueFrom Beispiel

Du möchtest vielleicht den ersten Wert erhalten, sobald er ankommt, ohne darauf zu warten, dass das Observable abgeschlossen ist, damit du firstValueFrom verwenden kannst. firstValueFrom wird das Versprechen mit dem ersten vom Observable ausgegebenen Wert auflösen und sofort abmelden, um die Ressource zu erhalten. Wenn die Observable komplett wird, ohne einen Wert zu emittieren, wird auch der firstValueFrom mit einem EmptyError abgelehnt.



lastValueFrom example

lastValueFrom ist fast identisch mit toPromise(), was bedeutet, dass es mit dem letzten erreichten Wert analysiert wird, wenn die Observable abgeschlossen ist, sich aber anders verhält, wenn die Observable abgeschlossen ist, ohne einen einzigen Wert zu emittieren. Wenn die Observable abgeschlossen ist, ohne ausgelöst zu werden, wird toPromise() erfolgreich auf undefiniert aufgelöst (daher ändert sich der Rückgabetyp), und lastValueFrom wird als EmptyError abgelehnt. Daher ist der Rückgabetyp von lastValueFrom Promise<T>, genau wie toPromise() in RxJS 6.





Beispiel für Parsing

In RxJS erzeugt Interval(1000) eine Observable, die alle 1000 Millisekunden (d. h. 1 Sekunde) eine inkrementelle Zahlenfolge ausgibt, beginnend bei 0.

Als nächstes ist .pipe(take(10)) eine Operatorkette, die die Anzahl der Elemente begrenzt, die das Observable emittiert. Hier bedeutet take(10), dass nur die Werte der ersten 10 emittierten Werte genommen werden.

Lassen Sie uns diesen Ausdruck im Detail erklären:

interval(1000): Erstelle eine Observable, die alle 1 Sekunde eine Zahl ausgibt. Die Zahlenfolge beginnt bei 0 und steigt jedes Mal um 1.

.pipe(take(10)): Verwenden Sie die .pipe()-Methode, um mehrere Operatoren zu verbinden. Hier verwenden wir den take(10)-Operator, der den Observablen begrenzt, sodass er nur die ersten 10 Werte emittiert.

Testen Sie auf EmptyError-Fehler

Der Code lautet wie folgt:


oder




Referenz:Der Hyperlink-Login ist sichtbar.




Vorhergehend:Die Ergebnisse einer MySQL-Kommandozeilenabfrage geben zurück? Fragezeichen
Nächster:Die Angular 18-Serie (zweiundzwanzig) führt die FontAwesome-Icon-Bibliothek ein
 Vermieter| Veröffentlicht am 06.08.2024, 11:21:09 |
Wenn du lastValueFrom oder firstValueFrom in Angular HTTP verwendest, ist das äquivalent, es gibt keinen Unterschied, das heißt, du kannst beide verwenden.
 Vermieter| Veröffentlicht am 16.10.2024, 21:44:52 |
Wenn du of() zurückgibst, kannst du eine Ausnahme ohne Elemente in der Sequenz erhalten, lastValueFrom nimmt jetzt den Konfigurationsparameter als zweiten Parameter, und du kannst den Standardwert angeben, der ausgegeben werden soll, wenn die Observable leer ist:

Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com