Šioje pamokoje mes sužinosime apie „Generatorius“ ir jų skirtumus su „Callback“
Kas yra generatoriai?
Generatoriai pastaruoju metu „Node.js“ tapo gana žinomi ir tikriausiai dėl to, ką sugeba.
- Generatoriai yra funkcijų vykdymai, kuriuos galima sustabdyti ir atnaujinti vėliau.
- Generatoriai yra naudingi vykdant tokias sąvokas kaip „tingus vykdymas“. Tai iš esmės reiškia, kad sustabdę vykdymą ir atnaujinę savo nuožiūra, mes galime pritraukti vertes tik tada, kai to reikia.
Generatoriai turi žemiau pateiktus 2 pagrindinius metodus
- Derliaus metodas - derliaus metodas iškviečiamas funkcijoje, kad būtų sustabdytas funkcijos vykdymas konkrečioje eilutėje, kur vadinamas derliaus metodas.
- Kitas metodas - Šis metodas iškviečiamas iš pagrindinės programos, norint atnaujinti funkcijos, turinčios derliaus metodą, vykdymą. Funkcija bus vykdoma iki kito derliaus metodo arba iki metodo pabaigos.
Pažvelkime į generatorių naudojimo pavyzdį.
Mūsų pavyzdyje turėsime paprastą funkciją „Pridėti“, kuri pridės 2 skaičius, tačiau mes ir toliau sustabdysime metodo vykdymą įvairiuose taškuose, kad parodytume, kaip galima naudoti generatorius.
function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();
Kodo paaiškinimas: -
- Pirmiausia reikia apibrėžti mūsų generatoriaus „funkciją“. Atminkite, kad tai daroma pridedant „*“ prie funkcijos raktinio žodžio. Tada mes apibrėžiame funkciją, vadinamą Pridėti, kuri ima x parametrą.
- Derlingumo raktinis žodis yra būdingas generatoriams. Tai daro galingą konstrukciją, kad funkcija būtų sustabdyta visko viduryje. Taigi čia funkcijos vykdymas bus sustabdytas tol, kol iškviesime kitą () funkciją, kuri bus atlikta 4 žingsnyje. Šiuo metu x reikšmė taps 6, o funkcijos vykdymas bus sustabdytas.
- Čia mes pirmiausia iškviečiame generatoriaus funkciją ir išsiunčiame 5 reikšmę į mūsų funkciją Pridėti. Ši vertė bus pakeista funkcijos „Add“ parametru x.
- Kai iškviesime kitą () funkciją, funkcija „Pridėti“ () bus atnaujinta. Kai bus įvykdytas kitas sakinys var y = yield (null), funkcija Add () vėl nustos vykdyti.
- Vėl iškvietus kitą () funkciją, bus paleisti kiti sakiniai, o x = 5 ir y = 6 bendra vertė bus pridėta ir grąžinta.
Atšaukimai ir generatoriai
Generatoriai naudojami vadinamojo skambučio pragaro problemai išspręsti. Kartais skambinant funkcijos tampa taip įdėtos kuriant „Node.js“ programą, kad tiesiog tampa per sudėtinga naudoti atgalinio skambinimo funkcijas.
Čia naudingi generatoriai. Vienas iš dažniausiai pasitaikančių pavyzdžių yra kuriant laikmačio funkcijas.
Pažiūrėkime žemiau pateiktą pavyzdį, kaip generatoriai gali būti naudingi per skambučius.
Mūsų pavyzdys tiesiog sukurs paprastą laiko uždelsimo funkciją. Tada norėtume pavadinti šią funkciją įtraukdami 1000, 2000 ir 3000 ms vėlavimą.
1 žingsnis. Apibrėžkite mūsų atgalinio ryšio funkciją su būtinu laiko uždelsimo kodu.
function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}
Kodo paaiškinimas: -
- Čia mes kuriame funkciją pavadinimu „Timedelay“ su parametru, vadinamu ptime. Tai užtruks reikiamą laiką, kurį norime pateikti savo paraiškoje.
- Kitas žingsnis yra tiesiog sukurti pranešimą, kuris bus rodomas vartotojui sakant, kad programa bus pristabdyta šiems daugeliui milisekundžių.
2 žingsnis) Dabar pažvelkime į kodą, jei mes įtraukėme atgalinius skambučius. Tarkime, kad norėjome įtraukti atgalinius skambučius pagal 1000, 2000 ir 3000 milisekundžių vertę, žemiau pateiktas kodas parodo, kaip mums reikės juos įgyvendinti naudojant atgalinius skambučius.
Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})
Kodo paaiškinimas: -
- Mes vadiname „Timedelay“ kaip atgalinį skambutį, kurio vertė yra 1000.
- Tada norime dar kartą iškviesti „Timedelay“ funkciją, kurios vertė yra 2000.
- Galiausiai norime dar kartą iškviesti „Timedelay“ funkciją, kurios vertė yra 3000.
Iš minėto kodo galite pamatyti, kad jis tampa paprastesnis, nes mes norime pradėti skambinti funkcijai kelis kartus.
3 žingsnis) Dabar pažiūrėkime, kaip įdiegti tą patį kodą naudojant generatorius. Iš žemiau pateikto kodo dabar galite pamatyti, kaip paprasta įdiegti „Timedelay“ funkciją naudojant generatorius.
function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}
Kodo paaiškinimas: -
- Pirmiausia mes apibrėžiame generatoriaus funkciją, kuri bus naudojama skambinant mūsų laiko juostos funkcijai.
- Kviečiame funkciją „Derlius“ kartu su „Timedelay“ funkcija, kurios parametro reikšmė yra „1000“.
- Tada mes vadiname funkciją „Derlius“ kartu su „Timedelay“ funkcija, kurios parametro reikšmė yra 2000.
- Galiausiai mes kviečiame funkciją „Derlius“ kartu su „Timedelay“ funkcija, kurios parametro reikšmė yra 3000.
Santrauka
Generatoriai taip pat gali būti naudojami siekiant įterpti atgalinių skambučių problemas ir padėti pašalinti vadinamąjį atgalinio skambučio pragarą. Generatoriai naudojami sustabdyti funkcijos apdorojimą. Tai pasiekiama naudojant asinchroninėje funkcijoje „derliaus“ metodą.