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