Защо използваме обратни извиквания, обещания или Async-Await? Какви са разликите между тях?
Javascript е език с една нишка, което означава, че JS машината може да обработва само едно нещо наведнъж и да изчака това нещо да приключи, преди да изпълни друго нещо.
Ако нашето JS приложение има API извикване, след това функция SetTimeOut и след това обикновена функция, това ще забави времето за зареждане на нашето приложение. Извикването на API или функцията SetTimeOut може да отнеме повече време за изпълнение и обикновената функция не може да бъде обработена, преди предишните функции да приключат изпълнението.
Това е мястото, където асинхронният JavaScript влиза в действие. Използвайки асинхронен JavaScript (като обратни извиквания, обещания и async/await), нашето JS приложение не трябва да чака отговор от предишна функция (която отнема повече време за обработка), преди да изпълни друга функция.
✤ Обратни повиквания:
В Javascript функцията за обратно извикване е функция, която се предава като аргумент на друга функция. Функцията, която приема функция/функции (функция за обратно извикване) като аргумент/аргументи, се нарича функция от по-висок ред. Функциите за обратно извикване се изпълняват вътре във функцията от по-висок ред.
Пример за код:
✤ Обещания:
Обещанието е обект, който представя стойност, която може да не е налична все още, но ще бъде разрешена в някакъв момент в бъдеще. Това ни позволява да асоциираме манипулатори с асинхронно действие, което в крайна сметка ще върне успешна стойност или причина за неуспех. Графиката по-долу показва процеса (фазите) на обещанията.
Пример за код:
✤ Async-Await:
Async-await е начин за писане на функции, които съдържат обещания/асинхронен код, който изглежда синхронен.
Функция async-await е функцията, която съдържа израз за очакване, който спира изпълнението на функцията async и изчаква предаденото обещание да бъде разрешено. След като обещанието бъде разрешено, то извлича изпълненията на асинхронната функция и оценява като разрешената стойност.
Пример за код:
★ Защо използването на Promises или Async-await е по-добро от обратните извиквания? и защо използването на Async-await е по-добро от Promises?
► Използването на обратно извикване е добро, но като разработчици трябва да знаем как да избегнем ада с обратно извикване (вложени функции). Адът на обратното извикване е много лош случай, когато имате много обратни извиквания вътре в тях. Обратното извикване hell can прави кода нечетим, нито поддържаем. По-долу са някои начини за избягване на ада за обратно извикване:
- Модулизация: разделяйте обратните извиквания на независими функции.
- Можете да пишете обратни повиквания, като използвате обещания. Обещанията разбиват кода и ги свързват заедно. Така че вместо отстъп на кода надясно, както при обратните извиквания, вашите кодове сега се увеличават във вертикална посока. Което реши основния проблем с обратното извикване.
- Можете да пишете обратни извиквания, като използвате новия async/await. Async await премахва блоковете .then на вашия код, заменя ги с блокове try и catch, което прави кода ви да изглежда синхронен.
► Async/await е равно на неблокиране, точно като обещанията. Въпреки това, целта на използването на async-await функции е да се опрости поведението на обещанията синхронно и да се извършат поведения на група обещания. По-долу са някои предимства на използването на Async/await пред обещания:
- По-ниски изисквания за памет.
- Чист и чист синтаксис.
- По-четливо.
- Обработва условните изрази по-гладко и по-чисто от обещанията.
- По-добро обработване и докладване на грешки.
Благодаря ви, че прочетохте! 😊