Ebben az oktatóanyagban megismerkedünk a generátorokkal és azok visszahívásokkal kapcsolatos különbségeivel
Mik azok a generátorok?
A generátorok meglehetősen híressé váltak a Node.js-ben az utóbbi időben, és valószínűleg azért, mert képesek megtenni.
- A generátorok olyan függvény-végrehajtások, amelyek később felfüggeszthetők és folytathatók.
- A generátorok hasznosak olyan koncepciók végrehajtásakor, mint a „lusta végrehajtás”. Ez alapvetően azt jelenti, hogy a végrehajtás felfüggesztésével és tetszés szerinti folytatással csak akkor tudunk értékeket húzni, amikor szükségünk van rá.
A generátorok az alábbi 2 kulcsfontosságú módszerrel rendelkeznek
- Hozam-módszer - A hozam-módszert egy függvényben hívják le, hogy leállítsák a függvény végrehajtását azon a vonalon, ahol a hozam-módszert hívják.
- Következő módszer - Ezt a módszert a fő alkalmazásból hívják meg, hogy folytassák egy hozam módszerrel rendelkező függvény végrehajtását. A függvény végrehajtása a következő hozammódszerig vagy a módszer végéig folytatódik.
Nézzünk meg egy példát a generátorok használatára.
Példánkban lesz egy egyszerű Add függvény, amely 2 számot ad hozzá, de továbbra is leállítjuk a metódus végrehajtását különböző pontokon, hogy bemutassuk a generátorok használatát.
function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();
Kód Magyarázat: -
- Az első lépés a generátor "funkciójának" meghatározása. Vegye figyelembe, hogy ez úgy történik, hogy egy "*" -t ad hozzá a függvény kulcsszavához. Ezután meghatározzuk az Add nevű függvényt, amely x paramétert vesz fel.
- A hozam kulcsszó a generátorokra jellemző. Ez egy erőteljes konstrukcióvá teszi a függvény szüneteltetését bármi közepén. Tehát itt a függvény végrehajtása le lesz állítva, amíg meg nem hívjuk a következő () függvényt, amelyet a 4. lépésben hajtunk végre. Ekkor x értéke 6 lesz, és a függvény végrehajtása leáll.
- Itt hívjuk meg először a generátor függvényt, és elküldjük az 5 értéket az Add függvényünknek. Ezt az értéket felvesszük az Add függvény x paraméterében.
- Miután meghívtuk a következő () függvényt, az Add () függvény folytatja a végrehajtást. Amikor a következő var y = hozam (null) utasítás végrehajtásra kerül, az Add () függvény ismét leállítja a végrehajtást.
- A következő () függvény újbóli meghívása után a következő utasítások futnak, és az x = 5 és y = 6 együttes értéke hozzáadódik és visszaadódik.
Visszahívások és generátorok
A generátorokat az úgynevezett visszahívási pokol problémájának megoldására használják. Néha a visszahívási funkciók annyira beágyazódnak a Node.js alkalmazás fejlesztése során, hogy túl bonyolulttá válik a visszahívási funkciók használata.
Itt hasznosak a generátorok. Ennek egyik leggyakoribb példája az időzítő funkciók létrehozása.
Lássuk az alábbi példát arra, hogy a generátorok miként bizonyulhatnak hasznosnak a visszahívások felett.
Példánk csak egy egyszerű késleltetési funkciót hoz létre. Ezután ezt a függvényt 1000, 2000 és 3000 ms késleltetéssel szeretnénk hívni.
1. lépés: Határozza meg visszahívási funkciónkat a szükséges késleltetési kóddal.
function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}
Kód Magyarázat: -
- Itt létrehozunk egy Timedelay nevű függvényt egy ptime nevű paraméterrel. Ehhez a szükséges késleltetés szükséges, amelyet be akarunk vezetni az alkalmazásunkba.
- A következő lépés csak egy üzenet létrehozása, amely megjelenik a felhasználó számára, mondván, hogy az alkalmazás szüneteltetni fogja ezt a sok milliszekundumot.
2. lépés) Most nézzük meg a kódot, ha visszahívásokat is beépítettünk volna. Tegyük fel, hogy visszahívásokat akartunk beépíteni 1000, 2000 és 3000 milliszekundum értékek alapján, az alábbi kód megmutatja, hogyan kellene ezeket visszahívásokkal megvalósítani.
Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})
Kód Magyarázat: -
- Visszahívásnak hívjuk a Timedelay-t, amelynek értéke 1000.
- Ezután újra meg akarjuk hívni a Timedelay függvényt, amelynek értéke 2000.
- Végül szeretnénk újra meghívni a Timedelay függvényt 3000 értékkel.
A fenti kódból láthatja, hogy rendesebbé válik, mivel el akarjuk kezdeni a függvény többszörös meghívását.
3. lépés) Most nézzük meg, hogyan lehet ugyanazt a kódot generátorok segítségével megvalósítani. Az alábbi kódból most láthatja, milyen egyszerűvé vált a Timedelay függvény generátorok segítségével történő megvalósítása.
function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}
Kód Magyarázat: -
- Először meghatározunk egy generátorfüggvényt, amelyet a Timedelay függvényünk meghívására használunk.
- Meghívjuk a Hozam függvényt, a Timedelay függvénnyel együtt, amelynek paraméter értéke 1000.
- Ezután a Yield függvényt hívjuk meg a Timedelay függvénnyel együtt, 2000-es paraméterértékként.
- Végül a Yield függvényt hívjuk meg a Timedelay függvénnyel együtt, amelynek paraméterértéke 3000.
Összegzés
A generátorok felhasználhatók a beágyazott visszahívásokkal kapcsolatos problémák enyhítésére és az úgynevezett visszahívási pokol eltávolításában is. A generátorokat a függvény feldolgozásának leállítására használják. Ez a 'hozam' módszer alkalmazásával érhető el az aszinkron függvényben.