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. |