Сколько существует способов выполнения асинхронных операций в JavaScript?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
3 основных: колбэки, промисы и async/await.
-
Колбэки: Функции, передаваемые в качестве аргумента другой функции, которая будет вызвана после завершения асинхронной операции.
// Пример с колбэком function fetchData(callback) { setTimeout(() => { callback(null, 'Данные получены'); }, 1000); } fetchData((error, data) => { if (error) { console.error(error); return; } console.log(data); // Выведет "Данные получены" через 1 секунду });Недостаток: "callback hell" при большом количестве вложенных асинхронных операций.
-
Промисы (Promises): Объекты, представляющие конечное завершение (или сбой) асинхронной операции и ее результирующее значение. Имеют три состояния:
pending,fulfilledиrejected.// Пример с промисом function fetchDataPromise() { return new Promise((resolve, reject) => { setTimeout(() => { // resolve('Данные получены через промис'); // Успех reject('Ошибка получения данных'); // Провал }, 1000); }); } fetchDataPromise() .then(data => { console.log(data); }) .catch(error => { console.error(error); // Выведет "Ошибка получения данных" через 1 секунду }) .finally(() => { console.log('Промис завершен'); });Преимущества: Улучшенная читабельность и управление ошибками по сравнению с колбэками.
-
async/await: Синтаксический сахар над промисами, позволяющий писать асинхронный код, который выглядит как синхронный.// Пример с async/await function fetchDataAsync() { return new Promise((resolve) => { setTimeout(() => { resolve('Данные получены через async/await'); }, 1000); }); } async function processData() { try { const data = await fetchDataAsync(); // Ждем выполнения промиса console.log(data); // Выведет "Данные получены через async/await" через 1 секунду } catch (error) { console.error(error); } } processData();Преимущества: Наиболее понятный синтаксис для работы с асинхронностью, удобное управление ошибками с помощью
try...catch.