Накратко
await изчаква резултат в текущата async функция. Този синтаксис улеснява четенето, но не премахва нуждата да се определят зависимости и поведение при грешка.
Полезно е да знаеш
Асинхронният код често трябва да опише няколко последователни действия. Синтаксисът async и await позволява такива действия да бъдат записани във форма, която прилича на обикновена последователност. Функция, обявена с async, връща Promise, а вътре в нея може да се използва await. Това не превръща мрежовата операция в незабавна. То предоставя начин програмата да изрази кога има нужда от бъдещия резултат и какво да направи след получаването му. [1]
Операторът await спира изпълнението на обграждащата асинхронна функция до приключването на очаквания Promise. При успешно изпълнение изразът дава получената стойност, а при отхвърляне причината се хвърля като изключение. [2] Затова обработката с try и catch е естествена част от много такива функции. Полезното разграничение е между изчакване в конкретната функция и общото поведение на приложението. Поставеният await не е инструкция целият браузър да престане да работи.
Представете си измислен редактор на кратки бележки. Потребителят натиска „Запази“, програмата изпраща съдържанието и след отговор показва потвърждение. Първо трябва да се определи какво точно означава потвърждението. Показваме ли го след започване на заявката или след успешен отговор? Този продуктов въпрос предхожда синтаксиса. Когато намерението е ясно, await може да постави следващата стъпка след необходимия резултат, вместо интерфейсът да съобщи успех прекалено рано.
Отделен въпрос е кои операции наистина зависят една от друга. Ако второто действие използва резултата на първото, последователното изчакване има очевидна причина. Ако две действия са независими, нуждите им трябва да бъдат разгледани отделно. Самата async декларация не взема това решение вместо автора. [1] В учебна задача можем да запишем входа и изхода на всяка функция. Така зависимостите стават видими още преди избора на конкретна организация на кода.
При грешка трябва да е ясно къде се възстановява интерфейсът. Например бутонът за запис не бива да остава с неясен надпис, който кара посетителя да гадае дали операцията продължава. За измисления редактор могат да се опишат три състояния: готовност, изчакване и приключване. После се добавя сценарий за неуспех с подходящо съобщение. Това не е свойство на ключовата дума await, а част от завършеното поведение, което програмата трябва да предостави.
Проверката на асинхронна функция е най-полезна, когато наблюдава резултата, а не само реда на редовете. Получени ли са правилните данни? Показано ли е съобщение след необходимото събитие? Има ли смислен изход при отхвърляне? Така async и await остават инструменти за ясно изразяване на потока. Те помагат кодът да бъде четим, когато авторът предварително е разграничил зависимостите, отговорностите и очакванията на човека, който използва интерфейса. В пример с редактор това означава изрично да различим започнатия запис от потвърдения запис и да проверим и двата момента.
Източници
За повече подробности и проверка на информацията: