Асинхроно програмирање је главна компонента у развоју софтвера. Тешко је поверовати да је овај концепт програмирања присутан тек од двадесет првог века. Програмски језик Ф# је био први међу својим колегама који је увео асинхроно програмирање, 2007.

Други језици као што су Ц#, Питхон, ЈаваСцрипт и Ц++ постепено су додавали подршку за асинхроно програмирање. Велико питање је, какву вредност асинхроно програмирање додаје вашим апликацијама?

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

Шта је синхроно програмирање?

Синхроно програмирање се односи на програм у његовом најосновнијем облику. Овај модел програмирања обрађује редове кода у програму или скрипти секвенцијално. Увек почиње од прве линије кода у програму. Затим чека да свака линија кода заврши своје извршење пре него што пређе на следећу.

Синхрони модел укључује и условни код, као нпр ако и док изјаве. Иако ће се извршити само неки код у условном исказу, програм ће се и даље изводити секвенцијално.

instagram viewer

Пример синхроног програма

цонст СинцЦоде = () => {
цонсоле.лог("Ово је први ред у програму")
цонсоле.лог("Ово је други ред у програму")
цонсоле.лог("Ово је последња линија у програму")
}

СинцЦоде();

Покретање горенаведеног ЈаваСцрипт програма ће произвести следећи излаз у конзоли:

Ово је први ред у програму
Ово је други ред у програму
Ово је последња линија у програму

Излаз изнад је управо оно што бисте требали очекивати. Програм почиње од врха и чека да се заврши један ред кода пре него што пређе на следећи.

Шта је асинхроно програмирање?

Асинхроно програмирање је супротно од синхроног програмирања. Модел асинхроног програмирања обрађује неколико линија кодова истовремено. Не чека да се претходни ред кода у програму заврши са извршавањем пре него што пређе на следећи.

Повезан: Синхрони вс. Асинхроно програмирање: по чему се разликују?

Асинхроно програмирање може преполовити време извршења, ефективно стварајући брже рачунаре.

Пример асинхроног програма

цонст АсинцЦоде = () => {
цонсоле.лог("Ово је први ред у програму")
сетТимеоут(() => {
цонсоле.лог("Ово је други ред у програму")
}, 3000)
цонсоле.лог("Ово је последња линија у програму")
}

АсинцЦоде();

Извршавање горенаведеног ЈаваСцрипт кода ће произвести следећи излаз у вашој конзоли:

Ово је први ред у програму
Ово је последња линија у програму
Ово је други ред у програму

Ако упоредите горњи излаз конзоле са асинхроним програмом који га генерише, видећете да постоји очигледно неслагање. Позив на Пријава која каже „Ово је други ред у програму“ појављује се пре оног који каже „Ово је последњи ред у програму“. Међутим, излаз на конзоли то не одражава.

С обзиром да је ЈаваСцрипт првенствено синхрони, код у програму изнад се извршавао секвенцијално. Али ЈаваСцрипт подржава асинхроно програмирање преко функција попут сетТимеоут() методом.

Тхе сетТимеоут() метход је асинхрони ЈаваСцрипт метод који узима два аргумента: функцију и кашњење. Кашњење је тајмер (у милисекундама), који одлаже извршење функције. Дакле, док програм изнад чека три секунде да изврши функцију у сетТимеоут() метод, прелази на следећи ред у коду. Ово резултира извршавањем трећег позива функције пре другог.

Асинхроне ЈаваСцрипт технологије

Осим на сетТимеоут() горе поменутом методом, неколико ЈаваСцрипт технологија користи асинхроно програмирање. Ове технологије користе модел асинхроног програмирања за развој бржих неблокирајућих апликација. Неке од ових технологија укључују:

  • јКуери Ајак
  • Акиос
  • НодеЈС

Повезан: Шта је Ноде.јс? Ево како да користите ЈаваСцрипт на страни сервера

Креирање асинхроних програма са ЈаваСцрипт-ом

Постоји неколико начина за руковање асинхроним кодом. Метода коју одаберете треба да зависи од врсте апликације коју желите да развијете. Ове методе укључују функције повратног позива, обећања и асинц/аваит.

Функције повратног позива

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

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

Коришћење обећања

ЈаваСцрипт је додао подршку за обећања након функција повратног позива. Они су добра алтернатива када креирате веће апликације. Обећање представља шта се може догодити након асинхроне операције. Овај потенцијални исход ће имати један од два облика: решено или одбијен. Засебна функција управља сваким од ових исхода, уклањајући потребу за угнежђењем (проблем функције повратног позива). Уместо тога, обећања подстичу функције ланца које је лакше користити.

Свако обећање почиње новим Обећај објекат који има анонимну функцију са решити и одбити параметрима. У оквиру ове функције, имаћете асинхрону апликацију, која враћа решење ако асинхрона операција успе, или одбацивање у супротном.

Тхе онда() функција ланца управља решити функција, и улов() функција ланца управља одбити функција. Дакле, нема потребе за угнежђеним иф изјавама, као што је случај са функцијама повратног позива.

Коришћење примера обећања

цонст ПромисеФунцтион = () =>{
врати ново обећање((реши, одбаци) => {
сетТимеоут(() => {
ресолве("ова асинхрона операција је добро извршена")
}, 3000)
})
}

ПромисеФунцтион().тхен((резултат) => {
цонсоле.лог("Успех", резултат)
}).цатцх((грешка) => {
цонсоле.лог("Грешка", грешка)
})

Горњи код враћа следећи излаз у конзоли:

Успех, ова асинхрона операција је добро изведена

То је зато што обећање враћа решити функција, која своје резултате преноси на онда() функција. Ако обећање врати одбити функцију коју програм користи улов функција уместо тога.

Коришћење Асинц/Аваит

Ако не желите да креирате ланац обећања када се бавите асинхроним операцијама, можете покушати асинц/аваит. Асинц/аваит није потпуно другачији асинхрони алат од обећања, само другачији начин руковања њима. Обрађује обећања без употребе методе ланца. Дакле, на исти начин на који обећања боље управљају асинхроним операцијама од функција повратног позива, асинц/аваит има предности у односу на обична обећања.

Постоје два кључна атрибута сваке функције асинц/аваит. Почињу са асинц кључну реч и чекати кључна реч чека резултат асинхроне операције.

Пример програма Асинц/Аваит

цонст ПромисеФунцтион = () =>{
врати ново обећање((реши, одбаци) => {
сетТимеоут(() => {
ресолве("ова асинхрона операција је добро извршена")
}, 3000)
})
}

цонст АсинцАваитФунц = асинц () => {
цонст резултат = чекај ПромисеФунцтион();
цонсоле.лог (резултат);
}

АсинцАваитФунц();

Код изнад ће вратити следећи излаз у конзоли:

ова асинхрона операција је добро изведена

Који су главни закључци?

Постоји неколико главних тачака које бисте требали узети из овог чланка:

  • Асинхроно програмирање је драгоцено јер смањује време чекања програма, стварајући брже апликације.
  • Функција повратног позива може бити синхрона или асинхрона.
  • Обећања нуде бољи начин за руковање асинхроним операцијама од функција повратног позива.
  • Функције асинц/аваит рукују обећањима на бољи начин него коришћењем ланчаних функција.
  • Функција асинц/аваит рукује асинхроним операцијама на начин који изгледа синхроно, што олакшава разумевање.
  • Функције стрелица вам помажу да напишете бољи код.
ЈаваСцрипт функције стрелице могу да вас учине бољим програмером

Желите да будете бољи у веб развоју? Функције стрелице, додате у ЈаваСцрипт ЕС6, дају вам два начина да креирате функције за веб апликације.

Реад Нект

ОбјавиТвеетЕмаил
Повезане теме
  • Програмирање
  • Програмирање
  • ЈаваСцрипт
О аутору
Кадеисха Кеан (Објављено 45 чланака)

Кадеисха Кеан је програмер комплетног софтвера и писац технике/технологије. Она има изразиту способност да поједностави неке од најсложенијих технолошких концепата; производећи материјал који може лако да разуме сваки почетник у технологији. Она је страствена у писању, развоју занимљивог софтвера и путовању светом (кроз документарне филмове).

Више од Кадеисхе Кеан

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили