Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 3279|Antwoord: 2

[Overig] RxJS over het verschil tussen firstValueFrom en lastValueFrom

[Link kopiëren]
Geplaatst op 6-8-2024 11:19:02 | | | |
Vereisten: Het project moet Observables omzetten naar Promises en wachten op voltooiing, en bij gebruik van de toPromise()-methode in een Angular-project is de hint verouderd, waarna wordt aanbevolen om de statische firstValueFrom of lastValueFrom methoden te gebruiken.



Waarom zou je de toPromise()-methode afschaffen?

Omdat de naam van de toPromise()-methode nooit aangeeft welke geëmitteerde waarde de Promise zal oplossen, omdat observables meerdere waarden in de loop van de tijd kunnen produceren. Bij het omzetten naar een Belofte wil je misschien kiezen of je de eerste waarde wilt kiezen die binnenkomt of de laatste waarde. Om al deze problemen op te lossen, besloten we toPromise() te deprecateren en twee nieuwe helperfuncties te introduceren voor het converteren naar promises.

Begrijp het gewoonObservabelen produceren meerdere waardenEn toenBeloften zullen slechts één waarde opleverenDan willen sommige gebruikers de eerste waarde gebruiken, en andere de laatste waarde, dus verschijnen firstValueFrom en lastValueFrom. (Opmerking: toPromise() is de laatste waarde die de observables krijgt

firstValueFrom-voorbeeld

Je wilt misschien de eerste waarde krijgen zodra deze arriveert zonder te wachten tot de Observable voltooid is, zodat je firstValueFrom kunt gebruiken. firstValueFrom zal de Belofte oplossen met de eerste waarde die door de Observable wordt uitgezonden en zich onmiddellijk afmelden om de bron te behouden. Als de Observable voltooid wordt zonder een waarde uit te geven, wordt de firstValueFrom ook verworpen met een EmptyError.



lastValueFrom example

lastValueFrom is bijna identiek aan toPromise(), wat betekent dat het zal parsen met de laatste bereikte waarde wanneer de Observable compleet is, maar zich anders gedraagt wanneer de Observable compleet is zonder een enkele waarde uit te zenden. Wanneer de Observable voltooid is zonder te worden geactiveerd, zal toPromise() succesvol worden opgelost naar undefined (dus het retourtype verandert), en lastValueFrom wordt afgewezen als EmptyError. Daarom is het retourtype van lastValueFrom Promise<T>, net als toPromise() in RxJS 6.





Voorbeeldparsing

In RxJS genereert interval(1000) een observable die elke 1000 milliseconden een incrementele reeks getallen uitzendt (d.w.z. 1 seconde), beginnend bij 0.

Vervolgens is .pipe(take(10)) een operatorketen die het aantal elementen dat de Observable uitzendt beperkt. Hier betekent take(10) dat alleen de waarden van de eerste 10 geëxmitteerde worden genomen.

Laten we deze uitdrukking in detail uitleggen:

interval(1000): Maak een observable die elke 1 seconde een getal uitzendt. De nummerreeks begint op 0 en neemt elke keer met 1 toe.

.pipe(take(10)): Gebruik de .pipe()-methode om meerdere operatoren te verbinden. Hier gebruiken we de take(10)-operator, die de Observable beperkt tot alleen de eerste 10 waarden.

Test op EmptyError-fouten

De code is als volgt:


of




Referentie:De hyperlink-login is zichtbaar.




Vorig:Resultaten van MySQL-commandoregelquerys geven terug? vraagteken
Volgend:De Angular 18-serie (tweeëntwintig) introduceert de FontAwesome-icoonbibliotheek
 Huisbaas| Geplaatst op 2024-8-6 11:21:09 |
Als je lastValueFrom of firstValueFrom gebruikt in Angular HTTP, is dat equivalent, er is geen verschil, dat wil zeggen, je kunt beide gebruiken.
 Huisbaas| Geplaatst op 16-10-2024 21:44:52 |
Als je of() teruggeeft, kun je een uitzondering zonder elementen in de volgorde krijgen, lastValueFrom neemt nu de configuratieparameter als tweede parameter, en je kunt de standaardwaarde specificeren die moet worden uitgegeven wanneer de observable leeg is:

Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com