Асинхронный код в JavaScript

Асинхронные операции

Асинхронные операции позволяют выполнять задачи, не блокируя основной поток выполнения. В 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);
    });