Ноде.јс генератори & амп; Упоредите са повратним позивима

Преглед садржаја:

Anonim

У овом упутству ћемо научити о генераторима и њиховим разликама са повратним позивима

Шта су генератори?

Генератори су постали прилично познати у Ноде.јс у новије време и то вероватно због онога што су способни да ураде.

  • Генератори су извршења функција која се касније могу суспендовати и наставити.
  • Генератори су корисни када се изводе концепти као што је „лење извршавање“. То у основи значи да смо суспендовањем извршења и наставком по вољи способни да повучемо вредности само када је то потребно.

Генератори имају доље наведена два кључна метода

  1. Метода приноса - метода приноса се позива у функцији да заустави извршавање функције на одређеној линији где се зове метода приноса.
  2. Следећи метод - Овај метод се позива из главне апликације за наставак извршавања функције која има метод приноса. Извршење функције наставиће се до следеће методе приноса или до краја методе.

Погледајмо пример како се генератори могу користити.

У нашем примеру, имаћемо једноставну функцију Адд која ће додати 2 броја, али ћемо наставити да заустављамо извршавање методе у различитим тачкама како бисмо показали како генератори могу да се користе.

function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();

Објашњење кода: -

  1. Први корак је дефинисање "функције" нашег генератора. Имајте на уму да се то ради додавањем знака "*" у кључну реч функције. Тада дефинишемо функцију звану Адд која узима параметар к.
  2. Кључна реч ииелд специфична је за генераторе. То га чини моћном конструкцијом за паузирање функције усред било чега. Дакле, овде ће се извршавање функције зауставити док не позовемо следећу () функцију, што ће бити учињено у кораку 4. У овом тренутку вредност к постаће 6 и извршавање функције ће бити заустављено.
  3. Ту прво позивамо функцију генератора и шаљемо вредност 5 нашој функцији Адд. Ова вредност ће бити замењена параметром к наше функције Адд.
  4. Једном када позовемо функцију нект (), функција Адд () ће наставити извршење. Када се изврши следећи израз вар и = ииелд (нулл), функција Адд () ће поново зауставити извршавање.
  5. Након поновног позива функције нект (), извршиће се следећи изрази и додаће се и вратити комбинована вредност к = 5 и и = 6.

Повратни позиви у односу на генераторе

Генератори се користе за решавање проблема онога што је познато као пакао повратног позива. Понекад се функције повратног позива толико угнезде током развоја апликације Ноде.јс да постаје превише компликовано за употребу функција повратног позива.

Овде су генератори корисни. Један од најчешћих примера за то је приликом креирања функција тајмера.

Погледајмо пример у наставку како се генератори могу показати корисним у случају повратних позива.

Наш пример ће само створити једноставну функцију временског одлагања. Тада бисмо желели да позовемо ову функцију која укључује кашњење од 1000, 2000 и 3000 мс.

Корак 1) Дефинишите нашу функцију повратног позива са потребним кодом за кашњење.

function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}

Објашњење кода: -

  1. Овде креирамо функцију која се назива Тимеделаи са параметром званим птиме. Ово ће узети потребно временско одлагање које желимо да уведемо у нашу апликацију.
  2. Следећи корак је само креирање поруке која ће се приказати кориснику рекавши да ће апликација бити паузирана за толико много милисекунди.

Корак 2) Погледајмо сада код ако смо уграђивали повратне позиве. Претпоставимо да смо желели да уврстимо повратне позиве на основу вредности од 1000, 2000 и 3000 милисекунди, доњи код показује како бисмо их требали применити помоћу повратних позива.

Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})

Објашњење кода: -

  1. Тимеделаи зовемо као повратни позив са вредношћу 1000.
  2. Даље желимо поново да позовемо функцију Тимеделаи са 2000 као вредношћу.
  3. На крају, желимо поново да позовемо функцију Тимеделаи са 3000 као вредност.

Из горњег кода можете видети да постаје неуреднији јер желимо да почнемо да позивамо функцију више пута.

Корак 3) Погледајмо сада како применити исти код помоћу генератора. Из доњег кода сада можете видети како је постало једноставно имплементирати функцију Тимеделаи помоћу генератора.

function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}

Објашњење кода: -

  1. Прво дефинишемо функцију генератора која ће се користити за позивање наше функције Тимеделаи.
  2. Позивамо функцију Ииелд заједно са функцијом Тимеделаи са 1000 као вредношћу параметра.
  3. Затим позивамо функцију Ииелд заједно са функцијом Тимеделаи са 2000 као вредношћу параметра.
  4. Коначно, позивамо функцију Ииелд заједно са функцијом Тимеделаи са 3000 као вредношћу параметра.

Резиме

Генератори се такође могу користити за ублажавање проблема са угнежђеним повратним позивима и помоћ у уклањању онога што је познато као пакао повратног позива. Генератори се користе за заустављање обраде функције. То се постиже употребом методе 'ииелд' у асинхроној функцији.