Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 3279|Svare: 2

[Annet] RxJS om forskjellen mellom firstValueFrom og lastValueFrom

[Kopier lenke]
Publisert 6.08.2024 kl. 11:19:02 | | | |
Krav: Prosjektet må konvertere Observables til Promises og vente på ferdigstillelse, og når toPromise()-metoden brukes i et Angular-prosjekt, er hintet foreldet, og da anbefales det å bruke de statiske metodene firstValueFrom eller lastValueFrom.



Hvorfor avvikle toPromise()-metoden?

Fordi navnet på toPromise()-metoden aldri angir hvilken emittert verdi Promise vil løse, fordi Observables kan produsere flere verdier over tid. Når du konverterer til et Løfte, kan det være lurt å velge om du vil velge den første verdien som kommer eller den siste verdien. For å løse alle disse problemene bestemte vi oss for å avvikle toPromise() og introdusere to nye hjelpefunksjoner for konvertering til promises.

Bare forståObservabler produserer flere verdierOg såLøfter vil bare resultere i én verdiDeretter vil noen brukere bruke den første verdien, og noen vil bruke den siste verdien, så firstValueFrom og lastValueFrom vises. (Merk: toPromise() er den siste verdien som henter observablene

firstValueFrom-eksempel

Du kan ønske å få den første verdien når den ankommer uten å vente på at Observablen skal fullføres, slik at du kan bruke firstValueFrom. firstValueFrom vil løse Promise med den første verdien som Observablen utsender og umiddelbart avslutte abonnementet for å bevare ressursen. Hvis Observablen fullføres uten å sende ut noen verdi, vil også firstValueFrom bli avvist med en EmptyError.



lastValueFrom-eksempel

lastValueFrom er nesten identisk med toPromise(), noe som betyr at den vil analysere med den siste verdien som nås når observablen fullføres, men oppfører seg annerledes når observablen fullføres uten å sende ut en eneste verdi. Når Observablen fullføres uten å bli avfyrt, vil toPromise() lykkes med å løses til udefinert (slik at returtypen endres), og lastValueFrom vil bli avvist som EmptyError. Derfor er returtypen til lastValueFrom Promise<T>, akkurat som toPromise() i RxJS 6.





Eksempel på parsing

I RxJS genererer interval(1000) en observabel som sender ut en inkrementell sekvens av tall hvert 1000 millisekund (dvs. 1 sekund), med start fra 0.

Deretter er .pipe(take(10)) en operatorkjede som begrenser antall elementer observablen sender ut. Her betyr take(10) at kun verdiene til de første 10 som sendes ut, tas.

La oss forklare dette uttrykket i detalj:

interval(1000): Lag en observabel som sender ut et tall hvert 1. sekund. Tallsekvensen starter på 0 og øker med 1 hver gang.

.pipe(take(10)): Bruk .pipe()-metoden for å koble sammen flere operatorer. Her bruker vi take(10)-operatoren, som begrenser observablen til kun å sende ut de første 10 verdiene.

Test for EmptyError-feil

Koden er som følger:


eller




Referanse:Innloggingen med hyperkoblingen er synlig.




Foregående:MySQL kommandolinjespørringsresultater returnerer ? spørsmålstegn
Neste:Angular 18-serien (tjueto) introduserer FontAwesome-ikonbiblioteket
 Vert| Publisert 6.08.2024 11:21:09 |
Hvis du bruker lastValueFrom eller firstValueFrom i Angular HTTP, er det ekvivalent, det er ingen forskjell, det vil si at du kan bruke begge.
 Vert| Publisert 16.10.2024 21:44:52 |
Hvis du returnerer av() kan du få et unntak uten elementer i sekvens, lastValueFrom tar nå konfigurasjonsparameteren som sin andre parameter, og du kan spesifisere standardverdien som skal emitteres når observablen er tom:

Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com