Асинхронная функция в JavaScript — это функция, которая всегда возвращает промис и внутри которой можно использовать ключевое слово await
. Это позволяет выстраивать асинхронные цепочки кода в синхронном стиле, делая их более читаемыми.
Асинхронная функция объявляется с помощью ключевого слова async
перед function
.
async function getData() {
return 'Данные загружены';
}
Пример использования асинхронной функции
Асинхронная функция всегда возвращает промис, даже если возвращает простое значение:
async function getData() {
return 'Данные загружены';
}
getData().then(console.log); // Данные загружены
Если внутри вызываются функции, возвращающие промисы, их можно ожидать с помощью await
:
async function fetchData() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const data = await response.json();
console.log(data);
}
Асинхронные методы в объектах
Асинхронные функции можно добавлять как методы в объекты:
const api = {
async getPost() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return await response.json();
}
};
api.getPost().then(console.log);
В классах методы также могут быть асинхронными:
class DataService {
async getPost() {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return await response.json();
}
}
const service = new DataService();
service.getPost().then(console.log);
Обработка ошибок в асинхронных функциях
Ошибки в асинхронных функциях обрабатываются с помощью блока try/catch
:
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
if (!response.ok) {
throw new Error(`Ошибка HTTP: ${response.status}`);
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error);
}
}
Асинхронные функции со стрелочным синтаксисом
Асинхронными могут быть и стрелочные функции:
const fetchPost = async () => {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return await response.json();
};
fetchPost().then(console.log);
Асинхронные функции в цепочках операций
При выполнении нескольких независимых запросов их удобно запускать одновременно с помощью Promise.all
внутри асинхронной функции:
async function fetchData() {
const [post, user] = await Promise.all([
fetch('https://jsonplaceholder.typicode.com/posts/1').then(r => r.json()),
fetch('https://jsonplaceholder.typicode.com/users/1').then(r => r.json())
]);
console.log('Пост:', post);
console.log('Пользователь:', user);
}
Возврат промисов внутри асинхронных функций
Если асинхронная функция возвращает промис, он автоматически оборачивается во внешний промис:
async function getData() {
return fetch('https://jsonplaceholder.typicode.com/posts/1').then(r => r.json());
}
Это позволяет использовать как await
, так и обычные методы then
:
getData().then(console.log);
async function showData() {
const data = await getData();
console.log(data);
}
Асинхронные функции в JavaScript — это удобный и современный способ работы с асинхронными операциями. Они делают код более линейным, снижают вероятность логических ошибок и упрощают обработку ошибок по сравнению с цепочками then/catch
. Поддержка этих функций есть во всех современных браузерах, что делает их стандартом при работе с асинхронностью в JavaScript.