В този урок ще научите за ключовите думи async / await на JavaScript с помощта на примери.
Използвате async
ключовата дума с функция, за да представите, че функцията е асинхронна функция. Функцията async връща обещание.
Синтаксисът на async
функцията е:
async function name(parameter1, parameter2,… paramaterN) ( // statements )
Тук,
- name - име на функцията
- параметри - параметри, които се предават на функцията
Пример: Асинхронна функция
// async function example async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f();
Изход
Асинхронна функция.
В горната програма async
ключовата дума се използва преди функцията, за да представи, че функцията е асинхронна.
Тъй като тази функция връща обещание, можете да използвате верижния метод then()
по следния начин:
async function f() ( console.log('Async function.'); return Promise.resolve(1); ) f().then(function(result) ( console.log(result) ));
Изход
Асинхронна функция 1
В горната програма f()
функцията е разрешена и then()
методът се изпълнява.
JavaScript очаква ключова дума
В await
ключова дума се използва в рамките на async
функцията да се изчака за асинхронна операция.
Синтаксисът за използване await е:
let result = await promise;
Използването прави await
пауза на асинхронната функция, докато обещанието върне резултат (разрешаване или отхвърляне) стойност. Например,
// a promise let promise = new Promise(function (resolve, reject) ( setTimeout(function () ( resolve('Promise resolved')), 4000); )); // async function async function asyncFunc() ( // wait until the promise resolves let result = await promise; console.log(result); console.log('hello'); ) // calling the async function asyncFunc();
Изход
Обещанието е разрешено здравей
В горната програма Promise
се създава обект и той се решава след 4000 милисекунди. Тук asyncFunc()
функцията се записва с помощта на async
функцията.
На await
чака за ключови думи за обещанието да бъде завършено (решителност или отхвърлят).
let result = await promise;
Следователно, hello се показва само след като обещаната стойност е достъпна за променливата на резултата.
В горната програма, ако await
не се използва, здравей се показва преди Promise разрешен.

Забележка : Можете да използвате await
само асинхронни функции.
Функцията async позволява асинхронния метод да бъде изпълнен по привидно синхронен начин. Въпреки че операцията е асинхронна, изглежда, че операцията се изпълнява по синхронен начин.
Това може да бъде полезно, ако в програмата има множество обещания. Например,
let promise1; let promise2; let promise3; async function asyncFunc() ( let result1 = await promise1; let result2 = await promise2; let result3 = await promise3; console.log(result1); console.log(result1); console.log(result1); )
В горната програма await
чака всяко обещание да бъде изпълнено.
Обработка на грешки
Докато използвате async
функцията, пишете кода по синхронен начин. И можете също да използвате catch()
метода, за да уловите грешката. Например,
asyncFunc().catch( // catch error and do something )
Другият начин да се справите с грешка е чрез използване на try/catch
блок. Например,
// a promise let promise = new Promise(function (resolve, reject) ( setTimeout(function () ( resolve('Promise resolved')), 4000); )); // async function async function asyncFunc() ( try ( // wait until the promise resolves let result = await promise; console.log(result); ) catch(error) ( console.log(error); ) ) // calling the async function asyncFunc(); // Promise resolved
В горната програма използвахме try/catch
блок за обработка на грешките. Ако програмата работи успешно, тя ще премине към try
блока. И ако програмата изхвърли грешка, тя ще премине към catch
блока.
За да научите повече за try/catch
подробности, посетете JavaScript JavaScript / try / catch.
Предимства от използването на асинхронна функция
- Кодът е по-четлив от използването на обратно обаждане или обещание.
- Обработката на грешки е по-проста.
- Отстраняването на грешки е по-лесно.
Забележка : Тези две ключови думи async/await
бяха въведени в по-новата версия на JavaScript (ES8). Някои по-стари браузъри може да не поддържат използването на async / await. За да научите повече, посетете поддръжката на браузъра async / await.