Вопрос проверяет понимание способов запуска асинхронных функций в JavaScript, что необходимо для работы с промисами и асинхронными операциями.
Асинхронная функция в JavaScript всегда возвращает объект Promise. Это означает, что её вызов инициирует асинхронную операцию, результат которой будет доступен в будущем. Понимание способов запуска критично для корректной работы с асинхронным кодом, избегания блокировки основного потока и обработки возможных ошибок.
Рассмотрим асинхронную функцию, которая имитирует задержку.
async function fetchData() {
// Имитация асинхронной операции
return new Promise(resolve => setTimeout(() => resolve('Данные получены'), 1000));
}
// Способ 1: Использование .then()
fetchData().then(result => {
console.log(result); // 'Данные получены'
}).catch(error => {
console.error(error);
});
// Способ 2: Использование await внутри async IIFE (немедленно вызываемая функция)
(async () => {
try {
const result = await fetchData();
console.log(result); // 'Данные получены'
} catch (error) {
console.error(error);
}
})();
// Способ 3: Простой вызов (не рекомендуется, так как результат теряется)
// fetchData(); // Промис создан, но не обработан.Первый способ (.then()) хорошо подходит для цепочек промисов или когда не нужно приостанавливать выполнение окружающего кода. Второй способ (await) делает код более линейным и читаемым, особенно при нескольких последовательных асинхронных вызовах.
Асинхронные функции и их запуск повсеместно используются при работе с API (fetch), файловой системой (в Node.js), таймерами, базами данных и любыми другими операциями ввода-вывода, которые могут занять время.
Вывод: Используйте await внутри async-функций для написания чистого, последовательного кода. Используйте .then() для более гибкой композиции промисов или в средах, где синтаксис async/await недоступен. Всегда обрабатывайте возможные ошибки с помощью try...catch или .catch().