Защо използваме обратни извиквания, обещания или 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 пред обещания:

  • По-ниски изисквания за памет.
  • Чист и чист синтаксис.
  • По-четливо.
  • Обработва условните изрази по-гладко и по-чисто от обещанията.
  • По-добро обработване и докладване на грешки.

Благодаря ви, че прочетохте! 😊