Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 3279|Odpověď: 2

[Jiné] RxJS o rozdílu mezi firstValueFrom a lastValueFrom

[Kopírovat odkaz]
Zveřejněno 6. 8. 2024 11:19:02 | | | |
Požadavky: Projekt musí převést Observables na Promises a počkat na dokončení, a při použití metody toPromise() v projektu Angular je hint již zastaralý, a poté se doporučuje použít statické metody firstValueFrom nebo lastValueFrom.



Proč zamítat metodu toPromise()?

Protože název metody toPromise() nikdy neukazuje, kterou vydanou hodnotu Promise vyřeší, protože Observable mohou v čase generovat více hodnot. Při převodu na slib možná budete chtít zvolit, zda chcete zvolit první hodnotu, která dorazí, nebo poslední hodnotu. Abychom vyřešili všechny tyto problémy, rozhodli jsme se stáhnout toPromise() a zavést dvě nové pomocné funkce pro převod na promise.

Jednoduše pochoptePozorovatelné veličiny produkují více hodnotA pakSliby povedou jen k jedné hodnotěNěkteří uživatelé pak chtějí použít první hodnotu, jiní poslední hodnotu, takže se objeví firstValueFrom a lastValueFrom. (Poznámka: toPromise() je poslední hodnota, která získá pozorovatelné veličiny

firstValueFrom příklad

Možná budete chtít získat první hodnotu, když dorazí, aniž byste čekali na dokončení Observable, abyste mohli použít firstValueFrom. firstValueFrom vyřeší Slib s první hodnotou emitovanou Observable a ihned se odhlásí, aby zachoval zdroj. Pokud Observable dokončí bez vydání jakékoli hodnoty, firstValueFrom bude také odmítnut s EmptyError.



lastValueFrom příklad

lastValueFrom je téměř totožný s toPromise(), což znamená, že bude parsovat s poslední hodnotou dosaženou při dokončení Observable, ale chová se jinak, když Observable dokončí bez vydání jediné hodnoty. Když Observable dokončí bez spuštění, toPromise() úspěšně vyřeší na nedefinovanou (takže se změní typ returnu) a lastValueFrom bude odmítnut jako EmptyError. Proto je typ návratu lastValueFrom Promise<T>, stejně jako toPromise() v RxJS 6.





Příklad parsování

V RxJS interval(1000) generuje pozorovatelnou veličinu, která každých 1000 milisekund (tj. 1 sekunda) generuje postupnou sekvenci čísel, začínající na 0.

Dále je řetězec operátorů .pipe(take(10)) omezující počet prvků, které Observable vysílá. Zde take(10) znamená, že jsou přijaty pouze hodnoty prvních 10 vysílaných hodnot.

Pojďme si tento výraz podrobně vysvětlit:

interval(1000): Vytvořte pozorovatelnou veličinu, která každou 1 sekundu vyzařuje číslo. Číselná sekvence začíná na 0 a pokaždé se zvyšuje o 1.

.pipe(take(10)): Použijte metodu .pipe() pro propojení více operátorů. Zde používáme operátor take(10), který omezuje Observable na pouhých prvních 10 hodnot.

Testujte chyby EmptyError

Kód je následující:


nebo




Odkaz:Přihlášení k hypertextovému odkazu je viditelné.




Předchozí:Výsledky dotazu příkazového řádku MySQL return ? otazník
Další:Série Angular 18 (dvaadvacet) představuje knihovnu ikon FontAwesome
 Pronajímatel| Zveřejněno 6. 8. 2024 11:21:09 |
Pokud použijete lastValueFrom nebo firstValueFrom v Angular HTTP, je to ekvivalentní, není v tom rozdíl, tedy můžete použít obojí.
 Pronajímatel| Zveřejněno 16. 10. 2024 21:44:52 |
Pokud vrátíte of(), můžete dostat výjimku bez prvků v sekvenci, lastValueFrom Now vezme konfigurační parametr jako druhý parametr a můžete nastavit výchozí hodnotu, kterou se vygeneruje, když je pozorovatelná veličina prázdná:

Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com