Node.js generátorok & Hasonlítsa össze a visszahívásokkal

Tartalomjegyzék:

Anonim

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

  1. 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.
  2. 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: -

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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: -

  1. 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.
  2. 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: -

  1. Visszahívásnak hívjuk a Timedelay-t, amelynek értéke 1000.
  2. Ezután újra meg akarjuk hívni a Timedelay függvényt, amelynek értéke 2000.
  3. 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: -

  1. Először meghatározunk egy generátorfüggvényt, amelyet a Timedelay függvényünk meghívására használunk.
  2. Meghívjuk a Hozam függvényt, a Timedelay függvénnyel együtt, amelynek paraméter értéke 1000.
  3. Ezután a Yield függvényt hívjuk meg a Timedelay függvénnyel együtt, 2000-es paraméterértékként.
  4. 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.