Асинхронное ожидание в JavaScript
В JavaScript async/await — это расширение промисов, упрощающее написание промисов. Ключевое слово _async_ перед функцией заставляет функцию всегда возвращать обещание. А ключевое слово _await_ используется внутри асинхронных функций, что заставляет программу ждать, пока промис не разрешится.
Ключевые слова async и await позволяют писать асинхронное поведение на основе обещаний в более чистом стиле, избегая необходимости явно настраивать цепочки обещаний.
Мы используем ключевое слово async с функцией, чтобы обозначить, что функция является асинхронной.
async function test(param1, param2, ...paramN) { //statements }
Здесь,
- test — название функции
- param — параметры, которые передаются в функцию
асинхронная функция:
async function test() { console.log("Async"); return Promise.resolve(1); } test(); Output: Async
Поскольку эта функция возвращает обещание, вы можете использовать метод цепочки then() следующим образом:
async function test() { console.log("Async"); return Promise.resolve(1); } test().then(function (output) { console.log(output); }); Output: Async 1
ключевое слово ожидания:
Ключевое слово 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(); Output: Promise Resolved hello
- В приведенной выше программе объект Promise создается и разрешается через 4000 миллисекунд.
- Здесь функция asyncFunc() написана с использованием асинхронной функции.
- Следовательно, hello отображается только после того, как значение обещания станет доступным для переменной результата.
- Ключевое слово await ожидает завершения обещания.
Обработка ошибок :
При использовании асинхронной функции вы пишете код асинхронно.
Также вы можете использовать метод catch() для перехвата ошибки.
asyncFunc().catch( //catch error and do something )
Другой способ обработки ошибки — использование блока try/catch.
let promise = new Promise(function (resolve, reject) { setTimeout(function () { resolve("Promise Resolved"); }, 4000); }); async function asyncFunc() { try { //wait until the promise resolves let result = await promise; console.log(result); } catch (error) { console.log(error); } } asyncFunc();
Преимущества использования асинхронной функции:
- Код более читабелен, чем использование обратного вызова или промиса
- Обработка ошибок проста
- Отладка проще
Подпишитесь на меня на Github:
Гитхаб: https://github.com/jps27cse
Linkedin: https://www.linkedin.com/in/jps27cse