Követelmények: A projektnek át kell alakítania a Megfigyelhetőeket ígéretekre, és várnia kell a befejezésre, és amikor a toPromise() módszert Angular projektben használjuk, a tipp már elavult, ezért ajánlott a firstValueFrom vagy lastValueFrom statikus metódusok használatát.
Miért vonják vissza a toPromise() módszert?
Mert a toPromise() metódus neve sosem jelzi, hogy a Promise melyik kibocsátott értéket oldja meg, mert az Observables idővel több értéket is előállíthat. Ígéretre váltáskor érdemes lehet választani, hogy az első érkező értéket vagy az utolsót választod. Mindezen problémák megoldására úgy döntöttünk, hogy megszüntetjük a toPromise() funkciót, és két új segítő függvényt vezetünk be az ígéretekre történő átalakításhoz.
Egyszerűen értsd megMegfigyelhetők több értéket eredményeznekAztánAz ígéretek csak egy értéket eredményeznekEzután néhány felhasználó az első értéket akarja használni, mások pedig az utolsót, így firstValueFrom és lastValueFrom jelennek meg. (Megjegyzés: a toPromise() az utolsó érték, amely megfigyelhető adatokat kap)
firstValueFrom példa
Érdemes lehet az első értéket megszerezni, amikor megérkezik, anélkül, hogy megvárnád a megfigyelhető befejezést, így használhatod a firstValueFrom-t. firstValueFrom megoldja az ígéretet az Observable által kibocsátott első értékkel, és azonnal lemond előfizetésről, hogy megőrizze az erőforrást. Ha az Observable érték nélkül fejeződik ki, a firstValueFrom is EmptyError esetén elutasításra kerül.
lastValuePélda
lastValueFrom szinte megegyezik a toPromise()-val, ami azt jelenti, hogy az utolsó értékkel parsíroz, amikor az Observable teljesül, de másként viselkedik, amikor a Observable befejeződik anélkül, hogy egyetlen értéket sem bocsát ki. Amikor az Observable befejeződik anélkül, hogy kiindulna, a toPromise() sikeresen megoldódik definíció nélküli állapotba (így a visszaküldés típusa változik), és a lastValueFrom EmptyError néven elutasítódik. Ezért a lastValueFrom visszatérési típusa Promise<T>, akárcsak a toPromise() RxJS 6-ban.
Példa elemzés
Az RxJS-ben az interval(1000) egy megfigyelhető rendszert generál, amely 1000 milliszekundumonként (azaz 1 másodpercenként) egy inkrementális számsorozatot bocsát ki, 0-tól kezdve.
Ezután a .pipe(take(10)) egy operátorlánc, amely korlátozza az Observable által kibocsátott elemek számát. Itt a take(10) azt jelenti, hogy csak az első 10 kibocsátott értéket veszik fel.
Magyarázzuk el részletesen ezt a kifejezést:
interval(1000): Létrehozz egy megfigyelhetőt, amely 1 másodpercenként számot bocsát ki. A számsorozat 0-ról indul, és minden alkalommal 1-gyel nő.
.pipe(take(10)): Használja a .pipe() metódust több operátor összekapcsolására. Itt a take(10) operátort használjuk, amely korlátozza az Observable képességét arra, hogy csak az első 10 értéket bocsátson ki.
EmptyError hibák tesztje
A kódex a következő:
vagy
Utalás:A hiperlink bejelentkezés látható. |