Асинхронные операции
Асинхронные операции позволяют выполнять задачи, не блокируя основной поток выполнения. В JavaScript это достигается с помощью колбэков, промисов и async/await.
// Пример с setTimeout (асинхронная операция)
console.log('Начало');
setTimeout(function() {
console.log('Через 2 секунды');
}, 2000);
console.log('Конец');
Промисы
Промисы позволяют обрабатывать асинхронные операции более удобно и читабельно. Промис может быть выполнен успешно (resolved) или завершен с ошибкой (rejected).
// Создание промиса
let promise = new Promise(function(resolve, reject) {
let success = true;
if (success) {
resolve('Операция выполнена успешно');
} else {
reject('Произошла ошибка');
}
});
// Использование промиса
promise.then(function(message) {
console.log(message);
}).catch(function(error) {
console.error(error);
});
async/await
Ключевые слова async и await позволяют
писать асинхронный код в синхронном стиле. Функция, объявленная с
async, всегда возвращает промис.
// Пример использования async/await
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let data = await response.json();
console.log(data);
} catch (error) {
console.error('Ошибка:', error);
}
}
fetchData();
Обработка нескольких промисов
Вы можете использовать Promise.all для обработки
нескольких промисов одновременно. Этот метод позволяет дождаться
выполнения всех промисов.
// Пример обработки нескольких промисов
let promise1 = new Promise((resolve) => {
setTimeout(() => resolve('Результат 1'), 1000);
});
let promise2 = new Promise((resolve) => {
setTimeout(() => resolve('Результат 2'), 2000);
});
Promise.all([promise1, promise2])
.then((results) => {
console.log(results); // ['Результат 1', 'Результат 2']
})
.catch((error) => {
console.error('Ошибка:', error);
});