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