Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 3279|Svar: 2

[Andet] RxJS om forskellen mellem firstValueFrom og lastValueFrom

[Kopier link]
Opslået den 6-8-2024 11:19:02 | | | |
Krav: Projektet skal konvertere Observables til Promises og vente på færdiggørelse, og når toPromise()-metoden bruges i et Angular-projekt, er hintet blevet forældet, og det anbefales derefter at bruge de statiske firstValueFrom eller lastValueFrom-metoder.



Hvorfor afskaffe toPromise()-metoden?

Fordi navnet på toPromise()-metoden aldrig angiver, hvilken emitteret værdi Promise vil løse, fordi Observables kan producere flere værdier over tid. Når du konverterer til et Løfte, kan du vælge at vælge den første værdi, der ankommer, eller den sidste værdi. For at løse alle disse problemer besluttede vi at affase toPromise() og indføre to nye hjælpefunktioner til konvertering til promises.

Forstå det bareObservabler producerer flere værdierOg såLøfter vil kun resultere i én værdiSå vil nogle brugere bruge den første værdi, og nogle vil bruge den sidste værdi, så firstValueFrom og lastValueFrom vises. (Bemærk: toPromise() er den sidste værdi, der henter observablerne

firstValueFrom-eksempel

Du vil måske få den første værdi, når den ankommer, uden at vente på, at Observablen bliver færdig, så du kan bruge firstValueFrom. firstValueFrom vil løse Promise med den første værdi, der udsendes af Observablen, og straks afmelde sig for at bevare ressourcen. Hvis Observablen fuldender uden at udsende nogen værdi, vil firstValueFrom også blive afvist med en EmptyError.



lastValueFrom-eksempel

lastValueFrom er næsten identisk med toPromise(), hvilket betyder, at den vil parse med den sidste værdi, der nås, når Observablen fuldføres, men opfører sig anderledes, når Observablen fuldender uden at udsende en eneste værdi. Når Observablen fuldføres uden at blive affyret, vil toPromise() med succes blive løst til udefineret (så returtypen ændres), og lastValueFrom vil blive afvist som EmptyError. Derfor er returtypen for lastValueFrom Promise<T>, ligesom toPromise() i RxJS 6.





Eksempel på parsing

I RxJS genererer interval(1000) en observabel, der udsender en inkrementel sekvens af tal hvert 1000 millisekund (dvs. 1 sekund), startende ved 0.

Dernæst er .pipe(take(10)) en operatorkæde, der begrænser antallet af elementer, som Observablen udsender. Her betyder take(10), at kun værdierne af de første 10 udsendte tages.

Lad os forklare dette udtryk i detaljer:

interval(1000): Skab en observabel, der udsender et tal hvert 1. sekund. Talrækkefølgen starter på 0 og øges med 1 hver gang.

.pipe(take(10)): Brug .pipe()-metoden til at forbinde flere operatorer. Her bruger vi take(10)-operatoren, som begrænser Observablen til kun at udsende de første 10 værdier.

Test for EmptyError-fejl

Koden er som følger:


eller




Henvisning:Hyperlink-login er synlig.




Tidligere:Returnerer MySQL-kommandolinjeforespørgselsresultater? spørgsmålstegn
Næste:Angular 18-serien (toogtyve) introducerer FontAwesome-ikonbiblioteket
 Udlejer| Opslået den 6-8-2024 11:21:09 |
Hvis du bruger lastValueFrom eller firstValueFrom i Angular HTTP, er det ækvivalent, der er ingen forskel, det vil sige, du kan bruge begge.
 Udlejer| Opslået den 16-10-2024 kl. 21:44:52 |
Hvis du returnerer of(), kan du få en undtagelse uden elementer i sekvensen, lastValueFrom tager nu konfigurationsparameteren som sin anden parameter, og du kan angive standardværdien, der skal udsendes, når observablen er tom:

Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com