Зачем нужно ключевое слово async перед функцией?
Асинхронность и Event Loop
Ключевое слово `async` делает функцию асинхронной: она всегда возвращает промис, а внутри неё можно использовать await.
Что происходит с результатом
async function getNumber() {
return 42;
}
getNumber().then(console.log); // 42 — значение обёрнуто в промисВозвращаемое значение превращается в выполненный промис, а брошенная ошибка — в отклонённый:
async function fail() {
throw new Error('boom');
}
fail().catch(e => console.log(e.message)); // boomawait
Внутри async-функции await приостанавливает выполнение функции до завершения промиса, не блокируя поток:
async function load() {
const res = await fetch('/api/user');
return res.json();
}Без async слово await допустимо только в модуле на верхнем уровне.
Ошибки
Отклонённые промисы обрабатывают через try/catch:
try {
await load();
} catch (e) {
console.error(e);
}Нюансы
- Стрелочные функции тоже бывают асинхронными:
const f = async () => {}. - Несколько независимых запросов выполняют параллельно через
Promise.all, а не цепочкойawait.
Коротко для собеседования
async превращает функцию в возвращающую промис и разрешает await внутри неё. Это синтаксис поверх промисов: результат оборачивается в промис, исключение становится отклонением.