Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 3279|Odpoveď: 2

[Iné] RxJS o rozdiele medzi firstValueFrom a lastValueFrom

[Kopírovať odkaz]
Zverejnené 6.8.2024 o 11:19:02 | | | |
Požiadavky: Projekt musí konvertovať Observables na Promises a počkať na dokončenie, a pri použití metódy toPromise() v Angular projekte je nápoveda zastaraná, a potom sa odporúča použiť statické metódy firstValueFrom alebo lastValueFrom.



Prečo odmietať metódu toPromise()?

Pretože názov metódy toPromise() nikdy neuvádza, ktorú vydanú hodnotu sa Promise vyrieši, pretože Observables môžu v čase produkovať viacero hodnôt. Pri konverzii na sľub možno budete chcieť vybrať, či chcete zvoliť prvú alebo poslednú hodnotu. Aby sme vyriešili všetky tieto problémy, rozhodli sme sa zrušiť toPromise() a zaviesť dve nové pomocné funkcie na konverziu na promise.

Jednoducho pochoptePozorovateľné veličiny produkujú viacero hodnôtA potomSľuby prinesú len jednu hodnotuPotom niektorí používatelia chcú použiť prvú hodnotu, iní poslednú, takže sa zobrazia firstValueFrom a lastValueFrom. (Poznámka: toPromise() je posledná hodnota, ktorá získa pozorovateľné veličiny.

firstValueFrom príklad

Možno budete chcieť získať prvú hodnotu, keď príde, bez čakania na dokončenie Observable, takže môžete použiť firstValueFrom. firstValueFrom vyrieši Promise prvou hodnotou emitovanou Observable a okamžite sa odhlási, aby zachoval zdroj. Ak Observable dokončí bez vydania akejkoľvek hodnoty, firstValueFrom bude tiež odmietnutý s EmptyError.



lastValueFrom príklad

lastValueFrom je takmer identická s toPromise(), čo znamená, že bude parsovať s poslednou hodnotou dosiahnutou pri dokončení Observable, ale správa sa inak, keď Observable dokončí bez vydania jedinej hodnoty. Keď sa Observable dokončí bez spustenia, toPromise() sa úspešne vyrieši na undefined (takže sa mení typ návratu) a lastValueFrom bude odmietnutý ako EmptyError. Preto return typ lastValueFrom je Promise<T>, rovnako ako toPromise() v RxJS 6.





Príklad parsovania

V RxJS interval(1000) generuje pozorovateľnú veličinu, ktorá každých 1000 milisekúnd (t. j. 1 sekundu) generuje postupnosť čísel, začínajúc na 0.

Ďalej, .pipe(take(10)) je reťazec operátorov, ktorý obmedzuje počet prvkov, ktoré Observable vyžaruje. Tu take(10) znamená, že sa berú len hodnoty prvých 10 vydaných.

Vysvetlime tento výraz podrobne:

interval(1000): Vytvorte pozorovateľnú veličinu, ktorá každú 1 sekundu vyžaruje číslo. Číselná sekvencia začína na 0 a zakaždým rastie o 1.

.pipe(take(10)): Použite metódu .pipe() na prepojenie viacerých operátorov. Tu používame operátor take(10), ktorý obmedzuje Observable na vyžarovanie iba prvých 10 hodnôt.

Test na chyby EmptyError

Kód je nasledovný:


alebo




Referencia:Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:Výsledky dotazu príkazového riadku MySQL return ? otáznik
Budúci:Séria Angular 18 (dvadsaťdva) predstavuje knižnicu ikon FontAwesome
 Prenajímateľ| Zverejnené 2024-8-6 11:21:09 |
Ak použijete lastValueFrom alebo firstValueFrom v Angular HTTP, je to ekvivalentné, nie je v tom rozdiel, teda môžete použiť ktorýkoľvek z nich.
 Prenajímateľ| Zverejnené 16.10.2024 21:44:52 |
Ak vrátite of(), môžete dostať výnimku bez prvkov v sekvencii, lastValueFrom Now vezme konfiguračný parameter ako druhý parameter a môžete určiť predvolenú hodnotu, ktorú sa vygeneruje, keď je observable prázdny:

Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com