Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 3279|Odgovoriti: 2

[Drugo] RxJS o razliki med firstValueFrom in lastValueFrom

[Kopiraj povezavo]
Objavljeno 6. 8. 2024 ob 11:19:02 | | | |
Zahteve: Projekt mora pretvoriti Observables v Promises in počakati na dokončanje, pri uporabi metode toPromise() v Angular projektu pa je namig že zastarel, nato pa je priporočljivo uporabiti statične metode firstValueFrom ali lastValueFrom.



Zakaj ukiniti metodo toPromise()?

Ker ime metode toPromise() nikoli ne pove, katero oddano vrednost bo Oblise razrešila, saj lahko Observables skozi čas proizvedejo več vrednosti. Pri pretvorbi v obljubo boste morda želeli izbrati, ali želite izbrati prvo ali zadnjo vrednost. Da bi rešili vse te težave, smo se odločili, da ukinemo toPromise() in uvedemo dve novi pomožni funkciji za pretvorbo v promise.

Preprosto razumiteOpazljive vrednosti proizvajajo več vrednostiIn potemObljube bodo prinesle le eno vrednostNato nekateri uporabniki želijo uporabiti prvo vrednost, drugi pa zadnjo, zato se prikažeta firstValueFrom in lastValueFrom. (Opomba: toPromise() je zadnja vrednost, ki dobi opazljive vrednosti

firstValueFrom primer

Morda boste želeli dobiti prvo vrednost, ko prispe, brez čakanja, da se Observable zaključi, zato lahko uporabite firstValueFrom. firstValueFrom bo razrešil Promise s prvo vrednostjo, ki jo odda Observable, in se takoj odjavil, da ohrani vir. Če Observable dokonča brez oddaje kakršnekoli vrednosti, bo firstValueFrom prav tako zavrnjen z EmptyError.



lastValueFrom primer

lastValueFrom je skoraj identičen s toPromise(), kar pomeni, da bo analiziral z zadnjo vrednostjo, doseženo ob dokončanju Opazljivega objekta, vendar se obnaša drugače, ko se Opazljiv dokonča brez oddajanja ene same vrednosti. Ko se Observable zaključi brez sprožitve, se toPromise() uspešno razreši kot nedefinirano (torej se tip vrnitve spremeni), lastValueFrom pa bo zavrnjen kot EmptyError. Zato je tip return lastValueFrom Promise<T>, podobno kot toPromise() v RxJS 6.





Primer razčlenjevanja

V RxJS interval(1000) generira opazovalko, ki vsakih 1000 milisekund (tj. 1 sekundo) oddaja inkrementalno zaporedje števil, začenši pri 0.

Nato je .pipe(take(10)) veriga operatorjev, ki omejuje število elementov, ki jih Observable oddaja. Tukaj take(10) pomeni, da se vzamejo le vrednosti prvih 10 oddaj.

Pojasnimo ta izraz podrobno:

interval(1000): Ustvari opazovalko, ki vsakih 1 sekundo oddaja številko. Zaporedje števil se začne pri 0 in se vsakič poveča za 1.

.pipe(take(10)): Uporabite metodo .pipe() za povezavo več operatorjev. Tukaj uporabimo operator take(10), ki omeji Observable, da oddaja le prvih 10 vrednosti.

Testirajte za napake EmptyError

Koda je naslednja:


ali




Referenčni:Prijava do hiperpovezave je vidna.




Prejšnji:Rezultati poizvedb ukazne vrstice MySQL se vrnejo ? vprašaj
Naslednji:Serija Angular 18 (dvaindvajset) uvaja knjižnico ikon FontAwesome
 Najemodajalec| Objavljeno 6. 8. 2024 ob 11:21:09 |
Če v Angular HTTP uporabite lastValueFrom ali firstValueFrom, je to enakovredno, ni razlike, torej lahko uporabite katerikoli od njiju.
 Najemodajalec| Objavljeno 2024-10-16 21:44:52 |
Če vrnete of(), lahko dobite izjemo brez elementov v zaporedju, lastValueFrom Now vzame konfiguracijski parameter kot svoj drugi parameter in lahko določite privzeto vrednost, ki se odda, ko je opazljivka prazna:

Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com