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