Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 3279|Svar: 2

[Övrigt] RxJS om skillnaden mellan firstValueFrom och lastValueFrom

[Kopiera länk]
Publicerad den 2024-8-6 11:19:02 | | | |
Krav: Projektet behöver konvertera Observables till Promises och vänta på slutförande, och när toPromise()-metoden används i ett Angular-projekt har hinten tagits ur värde, och då rekommenderas att använda de statiska metoderna firstValueFrom eller lastValueFrom.



Varför avveckla toPromise()-metoden?

Eftersom namnet på toPromise()-metoden aldrig anger vilket emitterat värde löftet kommer att lösas, eftersom observabler kan producera flera värden över tid. När du konverterar till ett Löfte kan du vilja välja om du vill välja det första värdet som kommer eller det sista värdet. För att lösa alla dessa problem bestämde vi oss för att avlägsna toPromise() och införa två nya hjälpfunktioner för att konvertera till promises.

Förstå helt enkeltObservabler ger flera värdenOch sedanLöften resulterar bara i ett värdeSedan vill vissa användare använda det första värdet, och andra vill använda det sista värdet, så firstValueFrom och lastValueFrom dyker upp. (Observera: toPromise() är det sista värdet som hämtar observablerna

firstValueFrom-exempel

Du kanske vill få det första värdet när det anländer utan att vänta på att Observablen ska slutföras, så att du kan använda firstValueFrom. firstValueFrom kommer att lösa Löftet med det första värdet som Observerbaren sänder ut och omedelbart avprenumerera för att bevara resursen. Om Observablen kompletteras utan att emittera något värde, kommer firstValueFrom också att avvisas med en EmptyError.



lastValueFrom example

lastValueFrom är nästan identisk med toPromise(), vilket betyder att den kommer att tolkas med det sista värdet som nås när Observablen är komplett, men beter sig annorlunda när Observablen kompletteras utan att emittera ett enda värde. När Observablen slutförs utan att avfyras kommer toPromise() framgångsrikt att lösas till undefined (så return-typen ändras), och lastValueFrom kommer att avvisas som EmptyError. Därför är returtypen av lastValueFrom Promise<T>, precis som toPromise() i RxJS 6.





Exempel på parsning

I RxJS genererar interval(1000) en observabel som sänder en inkrementell sekvens av tal var 1000 millisekund (dvs. 1 sekund), med start från 0.

Därefter är .pipe(take(10)) en operatorkedja som begränsar antalet element som Observablen emitterar. Här betyder take(10) att endast värdena på de första 10 emitterades tas.

Låt oss förklara detta uttryck i detalj:

interval(1000): Skapa en observabel som avger ett tal var 1:e sekund. Talsekvensen börjar på 0 och ökar med 1 varje gång.

.pipe(take(10)): Använd .pipe()-metoden för att koppla ihop flera operatörer. Här använder vi take(10)-operatorn, som begränsar Observablen till att endast sända ut de första 10 värdena.

Testa för EmptyError-fel

Koden är följande:


eller




Hänvisning:Inloggningen med hyperlänken är synlig.




Föregående:MySQL-kommandoradsresultat returnerar ? frågetecken
Nästa:Angular 18-serien (tjugotvå) introducerar FontAwesome-ikonbiblioteket
 Hyresvärd| Publicerad den 2024-8-6 11:21:09 |
Om du använder lastValueFrom eller firstValueFrom i Angular HTTP är det likvärdigt, det är ingen skillnad, det vill säga du kan använda båda alternativen.
 Hyresvärd| Publicerad den 2024-10-16 21:44:52 |
Om du returnerar of() kan du få ett undantag utan element i sekvensen, lastValueFrom tar nu konfigurationsparametern som dess andra parameter, och du kan ange standardvärdet som ska emitteras när observabeln är tom:

Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com