Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 3279|Atsakyti: 2

[Kita] RxJS apie skirtumą tarp firstValueFrom ir lastValueFrom

[Kopijuoti nuorodą]
Paskelbta 2024-8-6 11:19:02 | | | |
Reikalavimai: Projektas turi konvertuoti stebimus dalykus į pažadus ir laukti, kol bus užbaigti, o naudojant metodą toPromise() kampiniame projekte, užuomina nebenaudojama, tada rekomenduojama naudoti statinius metodus firstValueFrom arba lastValueFrom.



Kodėl nebereikia naudoti toPromise() metodo?

Kadangi toPromise() metodo pavadinimas niekada nenurodo, kurią išgautą reikšmę pažadas išspręs, nes stebimi gali sukurti kelias reikšmes laikui bėgant. Konvertuodami į pažadą, galbūt norėsite pasirinkti, ar norite pasirinkti pirmąją, ar paskutinę vertę. Norėdami išspręsti visas šias problemas, nusprendėme nebenaudoti toPromise() ir pristatyti dvi naujas pagalbines funkcijas, skirtas konvertuoti į pažadus.

Tiesiog supraskiteStebimi duomenys sukuria kelias reikšmesIr tadaPažadai duos tik vieną reikšmęTada kai kurie vartotojai nori naudoti pirmąją reikšmę, o kai kurie vartotojai nori naudoti paskutinę reikšmę, todėl rodomi firstValueFrom ir lastValueFrom. (Pastaba: toPromise() yra paskutinė reikšmė, gaunanti stebimus

firstValueFrom pavyzdys

Galbūt norėsite gauti pirmąją reikšmę, kai ji bus gauta, nelaukdami, kol bus baigtas stebimasis, kad galėtumėte naudoti firstValueFrom. firstValueFrom išspręs pažadą su pirmąja stebimojo skleidžiama verte ir nedelsiant atsisakys prenumeratos, kad išsaugotų išteklius. Jei stebimas užbaigiamas neišskiriant jokios reikšmės, firstValueFrom taip pat bus atmestas su EmptyError.



lastValueFrom pavyzdys

lastValueFrom yra beveik identiškas toPromise(), o tai reiškia, kad jis analizuos su paskutine reikšme, pasiekta, kai stebimas užbaigs, bet elgsis kitaip, kai stebimas užbaigs neišleisdamas nė vienos reikšmės. Kai stebimas užbaigia be išleidimo, toPromise() sėkmingai išsisprendžia į neapibrėžtą (taigi pasikeičia grąžinimo tipas), o lastValueFrom bus atmestas kaip EmptyError. Todėl lastValueFrom grąžinimo tipas yra Promise<T>, kaip ir toPromise() RxJS 6.





Analizės pavyzdys

RxJS intervalas (1000) sukuria stebimąjį, kuris kas 1000 milisekundžių (t. y. 1 sekundę) skleidžia skaičių seką, pradedant nuo 0.

Toliau .pipe(take(10)) yra operatoriaus grandinė, ribojanti stebimų elementų skaičių. Čia take(10) reiškia, kad imamos tik pirmųjų 10 išmestų vertybių.

Išsamiai paaiškinkime šią išraišką:

intervalas (1000): Sukurkite stebimąjį, kuris skleidžia skaičių kas 1 sekundę. Numeracija prasideda nuo 0 ir kiekvieną kartą didėja 1.

.pipe(take(10)): Naudokite .pipe() metodą, kad sujungtumėte kelis operatorius. Čia mes naudojame take(10) operatorių, kuris riboja stebimąjį, kad jis skleistų tik pirmąsias 10 reikšmių.

Patikrinkite, ar nėra "EmptyError" klaidų

Kodas yra toks:


arba




Nuoroda:Hipersaito prisijungimas matomas.




Ankstesnis:MySQL komandų eilutės užklausos rezultatai grąžina ? klaustukas
Kitą:"Angular 18" serija (dvidešimt dvi) pristato "FontAwesome" piktogramų biblioteką
 Savininkas| Publikuota: 2024-8-6 11:21:09 |
Jei kampiniame HTTP naudojate lastValueFrom arba firstValueFrom, jis yra lygiavertis, nėra skirtumo, tai yra, galite naudoti bet kurį iš jų.
 Savininkas| Publikuota: 2024-10-16 21:44:52 |
Jei grąžinsite of(), galite gauti išimtį be elementų sekoje, lastValueFrom dabar priima konfigūracijos parametrą kaip antrąjį parametrą, ir galite nurodyti numatytąją reikšmę, kurią reikia išleisti, kai stebimas yra tuščias:

Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com