UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Angular RxJS
Dr. Bilicki Vilmos
Szoftverfejlesztés Tanszék
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Az előző előadás áttekintése
4Reaktív űrlapok
4Sablon alapú űrlapok 4Űrlap validáció
4Dinamikus űrlapok
2019. 03. 12. Webfejlesztés keretrendszerek 2
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Áttekintés
4Aszinkron programozás 4Callback
4Promise 4Generator 4Async/Await 4Observation
2019. 03. 12. Webfejlesztés keretrendszerek 3
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Aszinkron programozás
4Fontos aspektus
■ A felhasználói események aszinkronok
■ Erőforrások elérése a böngészőből és a szerver oldalon aszinkron
■ Időben eltolt futtatás
4JavaScript
■ egyszálas
■ nincs eszköztár a párhuzamos futás kezelésére (pl.: zárolás,…)
2019. 03. 12. Webfejlesztés keretrendszerek 4
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Aszinkronitás
4Futás befejezésig
■ Az adott kódrészlet nem szakítódik meg
■ Addig fut amíg át nem adja a vezérlést (return)
4Esemény hurok
■ A szálak eseményekkel kommunikálnak
egymással
■ Nem férnek hozzá egymás memória területéhez
■ Nincs rá garancia, hogy mennyi idő múlva kapja meg valaki az eseményt
2019. 03. 12. Webfejlesztés keretrendszerek 5
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Példa
2019. 03. 12. Webfejlesztés keretrendszerek 6
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Megoldás
4Callback
■ Hívj fel ha végeztél
4Promise
■ Itt a ketyere megszólal ha végeztem
4Generator
■ Kétirányú kommunikáció
4Async/Await
■ Generator egyszerűsítve
4Obeservable
■ Sorozat
2019. 03. 12. Webfejlesztés keretrendszerek 7
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Aszinkron programozás
4Megoldásmódok
■ Callback
– Egyszerű a szinkron kódhoz közelálló megoldás:
■ Promise, Future
– Egy proxy THEN metódussal
■ Observer
– Rekatív programozás
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise alapokon
2019. 03. 12. Webfejlesztés keretrendszerek 9
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Observable alapokon
2019. 03. 12. Webfejlesztés keretrendszerek 10
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Összefoglalva
2019. 03. 12. Webfejlesztés keretrendszerek 11
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Callback
4Klasszikus módszer az aszinkronitás kezelésére
4Regisztrálunk egy függvényt amit meghívnak ha befejezték a munkát
■ Ez általában anonim függvény
■ A Callback az eseménysorba kerül (valamikor megkapja a szálat)
2019. 03. 12. Webfejlesztés keretrendszerek 12
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Hiba-először
4Error-First Callback
4Mivel problémás a hibakezelés ezért először megnézi van-e hiba
2019. 03. 12. Webfejlesztés keretrendszerek 13
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Callback hell
4Pokol piramisa
4A program állapota a komplexitás miatt átláthatatlan lesz
4A programozó a sorok sorrendjét a végrehajtás sorrendjének veszi
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Callback megoldás
2019. 03. 12. Webfejlesztés keretrendszerek 15
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise
4 A Callback problémáit próbálja kezelni
4 Garantálja, hogy a callback-ek mindég ugyanolyan módon determinisztikusan kezelődnek
■ Nem hívhatja meg többször
■ Nem lehet egyszer ilyen egyszer olyan eredménye
■ Egy eredménye lehet
4 Az aszinkron függvény egy Promise objektumot ad vissza
■ Teljesített (fulfilled)
■ Elutasított (rejected)
4 Mivel objektum ezért továbbadható
2019. 03. 12. Webfejlesztés keretrendszerek 16
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Egyszerű Promise
2019. 03. 12. Webfejlesztés keretrendszerek 17
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise objektum
4 resolve/then - callback 4 reject/catch – callback 4 resolver
2019. 03. 12. Webfejlesztés keretrendszerek 18
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise állapotok
4A Promise objektumon belül van tárolva
■ Pending
■ Fulfilled
■ Rejected
4Miután a pending állapotból kilép az értékei már nem változhatnak
4Ha egy sikertelen műveletet újra akarunk kezdeni az egy új Promise lesz
■ Egy próbálkozása leírója
2019. 03. 12. Webfejlesztés keretrendszerek 19
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise
4Állapot átmenetek szabályozottak 4Resolve != Fulfill
■ Egy argumentummal meghívva -> fulfilled
■ Ha egy Promise-t adunk át akkor ezek kapcsolódnak
2019. 03. 12. Webfejlesztés keretrendszerek 20
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise belső állapotok
4A state és result belső állapotok, nem férünk hozzá
4Erre használhatjuk ezeket a metódusokat:
■ .then
■ .catch
■ .finally
2019. 03. 12. Webfejlesztés keretrendszerek 21
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise láncolás
2019. 03. 12. Webfejlesztés keretrendszerek 22
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise láncolás
4Minden then hívás egy újabb promise-t ad vissza
2019. 03. 12. Webfejlesztés keretrendszerek 23
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Több .then egy Promise-hoz
2019. 03. 12. Webfejlesztés keretrendszerek 24
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Végrehajtási sorrend
4Resolver – szinkron
4Then/catch - aszinkron
2019. 03. 12. Webfejlesztés keretrendszerek 25
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise visszaadása
2019. 03. 12. Webfejlesztés keretrendszerek 26
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
.then
2019. 03. 12. Webfejlesztés keretrendszerek 27
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Promise API
4Promise
4promise.then 4promise.catch 4Promise.resolve 4Promise.reject 4Promise.all
4Promise.race
2019. 03. 12. Webfejlesztés keretrendszerek 28
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
async/await
4Speciális szintaxis, Promise (Generator) van a háttérben
■ Async – Promise-t ad vissza
■ Await - ”megállítja a futást”
2019. 03. 12. Webfejlesztés keretrendszerek 29
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
2019. 03. 12. Webfejlesztés keretrendszerek 30
.then vs async/await
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Generátor
2019. 03. 12. Webfejlesztés keretrendszerek 31
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
A Generátor iterálható
2019. 03. 12. Webfejlesztés keretrendszerek 32
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Generátor
4Igény szerint több visszatérési érték, egyszerre egy
■ Observable – aktív (nem vár senkire sem)
■ Generátor – passzív
2019. 03. 12. Webfejlesztés keretrendszerek 33
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Aszinkron generátor
2019. 03. 12. Webfejlesztés keretrendszerek 34
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Reaktív programozás - RxJS
4 Aszinkron adatfolyam kezelés
■ Esemény buszok
■ Esmény kezelők
4 Bármiből gyárthatunk adatfolyamot
4 Folyamon alapuló logika
■ Egyik folyam lehet egy másik folyam forrása
■ Összeolvasztahtunk több folyamot, …
4 Folyam: a bekövetkezett események időben rendezett folyamatos listája 4 Az érték halmaza:
■ Normál értékek
■ Hibák
■ Folyam vége
4 Ezen eseményeket aszinkron módon kezeljük:
■ Függvény a normál értékekre
■ Függvény a hibákra
■ Függvény a végére
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Reaktív programozás - RxJS
4Folyamokra fel lehet íratkozni 4A folyamokat “megfigyeljük”
4Megfigyelő tervezési minta
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Reaktív programozás - RxJS
4A folyamok általában megváltoztathatatlanok (immutable)
4Új folyamok előállítása:
■ map – új folyamot állít elő a megfelelő F leképezéssel
■ filter – kiszűr adott eseményeket
■ scan - aggregáló függvénnyel minden beérkezett értéket aggregál
■ …
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Reaktív programozás - RxJS
4Dupla kattintás:
■ 250 ms –
esemény csend alapján
csoportosítjuk
■ Összeszámoljuk
■ Kiszűrjük
Webfejlesztés keretrendszerek
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
RxJS
4Obervables
■ Push alapú lista
■ Adat forrás -> adat nyelő (felíratkozott lista tagok)
4LINQ
4Schedulers
2019. 03. 12. Webfejlesztés keretrendszerek 39
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Observables
2019. 03. 12. Webfejlesztés keretrendszerek 40
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Observables
4Forró vs. Hideg (Hot vs Cold)
■ Forró
– Amennyiben senkit sem érdekel akkor is fut a háttérben
– Amikor valaki fleíratkozik a legutolsó értéket kapja meg
– Megvan osztva a fleíratkozottak között
■ Hideg
– Csak akkor kezdi el az értékek kiadását, ha valaki felíratkozott rá
– Nincs megosztva a fleíratkozottak között
2019. 03. 12. Webfejlesztés keretrendszerek 41
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
RxJS operátorok
2019. 03. 12. Webfejlesztés keretrendszerek 42
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
RxJS operátorok
2019. 03. 12. Webfejlesztés keretrendszerek 43
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Időzítők
4A futtatandó feladatok mendzselése
■ Adat struktúra
■ Várakozási sor
■ Futási kontextus
■ Időzítés
4Virtuális idő
4Időzítő típusok
■ Standard
– Adott időpontban – Adott időpontig
■ Rekurzív
■ Periodikus
2019. 03. 12. Webfejlesztés keretrendszerek 44
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Áttekintés
4Aszinkron programozás 4Callback
4Promise 4Generator 4Async/Await 4Observation
2019. 03. 12. Webfejlesztés keretrendszerek 45
UNIVERSITY OF SZEGED Department of Software EngineeringUNIVERSITAS SCIENTIARUM SZEGEDIENSIS
Következő előadás
4Bevezetés: NgModules
4JS Modules vs. NgModules 4Gyakran használt NgModules 4A képesség modulok típusai 4Entry Components
4Feature Modules 4Szolgáltatók
4Singleton Szolgáltatások
4Képesség modulok laza betöltése 4NgModulok megosztása
4NgModule API
2019. 03. 12. Webfejlesztés keretrendszerek 46