У претходним водичима видели бисте функције повратног позива које се користе за асинхроне догађаје. Али понекад функције повратног позива могу постати ноћна мора када почну да се угнезде, а програм почне да постаје дугачак и сложен.
У овом упутству ћете научити-
- Шта су обећања?
- Повратни позиви обећањима
- Суочавање са угнежђеним обећањима
- Стварање прилагођеног обећања
Шта су обећања?
Пре него што започнемо са обећањима, хајде да поново размотримо шта су функције „повратног позива“ у Ноде.јс. Ове функције повратног позива смо често видели у претходним поглављима, па хајде да брзо прођемо кроз једно од њих.
Пример у наставку приказује исечак кода који се користи за повезивање са МонгоДБ базом података и извођење операције ажурирања једног од записа у бази података.
-
У горњем коду део функције (ерр, дб) познат је као декларација анонимне или функције повратног позива. Када МонгоЦлиент креира везу са МонгоДБ базом података, вратиће се на функцију повратног позива када се операција везе заврши. Дакле, у одређеном смислу, операције повезивања се дешавају у позадини, а када се то заврши, позива нашу функцију повратног позива. Имајте на уму да је ово једна од кључних тачака Ноде.јс-а која омогућава истовремено обављање многих операција и на тај начин не блокира ниједног корисника да изврши операцију.
-
Други блок кода је оно што се извршава када се функција повратног позива стварно позове. Функција повратног позива само ажурира један запис у нашој бази података МонгоДБ.
Па шта је онда обећање? Па, обећање је само побољшање функција повратног позива у Ноде.јс. Током развојног животног циклуса, можда постоји инстанца у којој ћете требати угнездити више функција повратног позива заједно. Ово може постати неуредно и тешко га је одржавати у одређеном тренутку. Укратко, обећање је побољшање повратних позива које има за циљ ублажавање ових проблема.
Основна синтакса обећања приказана је у наставку;
var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
- „доСометхингАинц“ је било која функција повратног позива или асинхрона функција која врши неку врсту обраде.
- Овога пута, приликом дефинисања повратног позива, враћа се вредност која се назива „обећање“.
- Када се обећање врати, може имати 2 излаза. Ово је дефинисано 'клаузулом'. Било која операција може бити успешна што се означава параметром 'онФулфиллед'. Или може имати грешку која је означена параметром 'онРејецтед'.
Напомена: Дакле, кључни аспект обећања је повратна вредност. Не постоји концепт повратне вредности када се ради са нормалним повратним позивима у Ноде.јс. Због повратне вредности, имамо већу контролу над начином на који се функција повратног позива може дефинисати.
У следећој теми видећемо пример обећања и како имају користи од повратних позива.
Повратни позиви обећањима
Сада погледајмо пример како можемо да користимо „обећања“ из Ноде.јс апликације. Да бисте користили обећања у Ноде.јс апликацији, модул 'обећање' прво мора да се преузме и инсталира.
Затим ћемо изменити наш код као што је приказано доле, који ажурира Име запосленог у колекцији 'Запослени' помоћу обећања.
Корак 1) Инсталирање НПМ модула
Да бисте користили Промисес из Ноде ЈС апликације, потребан је модул обећања. Да бисте инсталирали обећавајући модул, покрените наредбу испод
нпм инсталирање обећања
Корак 2) Измените код тако да укључује обећања
var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});
Објашњење кода: -
- Први део је укључивање модула „обећања“ који ће нам омогућити употребу функције обећања у нашем коду.
- Сада можемо додати функцију 'тада' нашој функцији МонгоЦлиент.цоннецт. Дакле, ово што ради је да када се успостави веза са базом података, морамо извршити исечак кода дефинисан након тога.
- На крају, дефинишемо наш исечак кода који обавља посао ажурирања ЕмплоиееНаме запосленог са именом „Мартин“ у „Мохан“.
Белешка:-
Ако сада проверите садржај базе података МонгоДБ, открићете да ће, ако постоји запис са именом ЕмплоиееНаме за „Мартин“, бити ажуриран на „Мохан“.
Да бисте проверили да ли су подаци правилно уметнути у базу података, потребно је да извршите следеће наредбе у МонгоДБ
- Користите ЕмплоиееДБ
- дб.Е Емплоиее.финд ({Име запосленог: Мохан})
Прва изјава осигурава да сте повезани са базом података ЕмплоиееДб. Друга изјава тражи запис који има име запосленог „Мохан“.
Суочавање са угнежђеним обећањима
Када дефинишете обећања, треба напоменути да метода „тада“ сама враћа обећање. Дакле, у одређеном смислу, обећања могу бити угнежђена или везана једно за друго.
У доњем примеру користимо уланчавање да дефинишемо 2 функције повратног позива, које обе убацују запис у базу података МонгоДБ.
( Напомена : Цхаининг је концепт који се користи за повезивање извршавања метода међусобно. Претпоставимо да је ваша апликација имала 2 методе назване „метходА“ и „метходБ.“ А логика је била таква да би „метходБ“ требало позвати након „метходА“, онда бисте извршавање ланца повезали на такав начин да се 'метходБ' позива директно након 'метходА.')
Кључна ствар коју треба приметити у овом примеру је да код постаје чистији, читљивији и одрживији употребом угнежђених обећања.
var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});
Објашњење кода: -
- Сада дефинишемо 2 клаузуле „тада“ које се извршавају једна за другом. У првој клаузули тада преносимо параметар 'дб' који садржи нашу везу са базом података. Затим користимо својство колекције везе 'дб' за уметање записа у колекцију 'Запослени'. Метода 'инсертОне' користи се за уметање стварног документа у колекцију запослених.
- Ми се затим помоћу 2 НД затим клаузулу и да убаците још један рекорд у базу података.
Ако сада проверите садржај своје МонгоДБ базе података, наћи ћете 2 записа убачена у МонгоДБ базу података.
Стварање прилагођеног обећања
Прилагођено обећање може се створити употребом чворног модула названог 'к.' Библиотеку 'к' треба преузети и инсталирати помоћу управитеља пакета чворова. Након употребе библиотеке 'к', може се позвати метода "денодеифи" која ће проузроковати да било која функција постане функција која враћа обећање.
У примеру испод, створићемо једноставну функцију названу „Додај“ која ће додати 2 броја. Претворићемо ову функцију у функцију за враћање обећања.
Када се то заврши, користићемо обећање које је вратила функција Додај да бисмо приказали поруку у цонсоле.лог.
Слиједимо кораке у наставку за стварање наше прилагођене функције за враћање обећања.
Корак 1) Инсталирање НПМ модула
Да бисте користили 'к' из Ноде ЈС апликације, потребан је модул 'к'. Да бисте инсталирали модул 'к', покрените наредбу испод
нпм инсталирати к
Корак 2) Дефинишите следећи код који ће се користити за креирање прилагођеног обећања.
Објашњење кода: -
- Први бит је укључивање библиотеке 'к' помоћу кључне речи рекуире. Коришћењем ове библиотеке моћи ћемо да дефинишемо било коју функцију за узвратни позив.
- Стварамо функцију звану Адд која ће додати 2 броја дефинисана у променљивим а и б. Збир ових вредности чуваће се у променљивој ц.
- Затим користимо к библиотеку за денодеификацију (метода која се користи за претварање било које функције у функцију која би вратила обећање) наше функције Адд или на други начин конвертујемо нашу функцију Адд у функцију која враћа обећање.
- Сада позивамо нашу функцију „Додај“ и можемо да добијемо повратну вредност обећања због претходног корака који смо извршили денодеификовања функције Додај.
- Коришћена је кључна реч 'тхен', која наводи да ако се функција успешно изврши, онда ће се приказати низ "Функција сабирања завршена" у цонсоле.лог.
Када се покрене горњи код, излаз "Функција додавања је завршена" биће приказан у цонсоле.лог као што је приказано доле.
Резиме
- Коришћење функција повратног позива у Ноде.јс има својих недостатака. Понекад током процеса развоја угнежђена употреба функција повратног позива може код учинити неуреднијим и тешким за одржавање.
- Већина проблема са угнежђеним функцијама повратног позива може се ублажити употребом обећања и генератора у ноде.јс
- Промисе је вредност коју враћа асинхрона функција како би указала на завршетак обраде коју изводи асинхрона функција.
- Обећања се могу угнездити једно у друго како би код изгледао боље и лакше за одржавање када треба асинхрону функцију позвати након друге асинхроне функције