Промисы (Promises) в JavaScript

НАВИГАЦИЯ ПО СТРАНИЦЕ

Создание промиса Обработка промиса Промисы и цепочки Promise.all и Promise.race

Промисы (Promises) — это мощный механизм в JavaScript для управления асинхронными операциями. Они предоставляют более удобный способ обработки асинхронных задач, таких как загрузка данных из сети, анимации и многое другое.

Создание промиса

Промис создается с помощью конструктора Promise. Он принимает функцию, которая имеет два аргумента: resolve и reject. Эти аргументы — это функции, которые вызываются при завершении асинхронной операции, чтобы обработать успешный или ошибочный результат.

const myPromise = new Promise((resolve, reject) => {
  // Выполните асинхронную операцию
  // Если операция успешно завершена:
  resolve('Успешно!');
  // Если произошла ошибка:
  reject('Ошибка!');
});

Обработка промиса

Промисы позволяют вам применять методы .then() и .catch() для обработки результатов асинхронной операции. Метод .then() принимает функцию, которая будет выполнена при успешном завершении операции, а метод .catch() — при ошибке.

myPromise
  .then((result) => {
    console.log(result); // Выведет "Успешно!"
  })
  .catch((error) => {
    console.error(error); // Выведет "Ошибка!"
  });

Промисы и цепочки

Вы также можете цеплять несколько .then() для обработки промисов последовательно. Это делает код более читаемым и позволяет выполнять последовательные асинхронные операции.

myPromise
  .then((result) => {
    console.log(result); // Выведет "Успешно!"
    return 'Дополнительные данные';
  })
  .then((data) => {
    console.log(data); // Выведет "Дополнительные данные"
  })
  .catch((error) => {
    console.error(error); // Выведет "Ошибка!"
  });

Promise.all и Promise.race

Promise.all() позволяет выполнить несколько промисов параллельно и дождаться завершения всех. Promise.race() позволяет выполнить несколько промисов параллельно и вернуть результат первого завершившегося промиса.

const promise1 = fetchDataFromServer();
const promise2 = fetchUserData();
const promise3 = loadConfigFile();

Promise.all([promise1, promise2, promise3])
  .then((results) => {
    // Результаты всех промисов
  })
  .catch((error) => {
    // Обработка ошибки
  });

Promise.race([promise1, promise2, promise3])
  .then((result) => {
    // Результат первого завершившегося промиса
  })
  .catch((error) => {
    // Обработка ошибки
  });

Промисы являются важной частью работы с асинхронным кодом в JavaScript и сильно улучшают читаемость и обслуживаемость кода. Они позволяют элегантно обрабатывать успешное и ошибочное завершение асинхронных операций, а также позволяют создавать сложные последовательности асинхронных задач.