← Назад ко всем вопросам

Promise.race()

1️⃣ Как кратко ответить

Promise.race() — это метод, который принимает итератор промисов и возвращает новый промис, который разрешается или отклоняется с результатом первого завершившегося промиса из переданных.

2️⃣ Подробное объяснение темы

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

Как это работает

Когда вы вызываете Promise.race() и передаете ему массив (или любой другой итерируемый объект) промисов, он возвращает новый промис. Этот новый промис будет разрешен или отклонен с результатом первого промиса, который завершится. Это может быть полезно, когда вам нужно выполнить действие, как только будет доступен первый результат, не дожидаясь завершения всех промисов.

Пример использования

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'Первый промис завершен');
});
​
const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'Второй промис завершен');
});
​
Promise.race([promise1, promise2])
  .then((value) => {
    console.log(value); // 'Второй промис завершен'
  })
  .catch((error) => {
    console.error(error);
  });

Объяснение кода:

  • promise1: Создается новый промис, который будет разрешен через 500 миллисекунд с сообщением 'Первый промис завершен'.
  • promise2: Создается другой промис, который будет разрешен через 100 миллисекунд с сообщением 'Второй промис завершен'.
  • Promise.race([promise1, promise2]): Метод race принимает массив из двух промисов. Он возвращает новый промис, который будет разрешен или отклонен с результатом первого завершившегося промиса.
  • .then((value) => { ... }): Обработчик, который будет вызван, когда первый из промисов завершится успешно. В данном случае, это будет 'Второй промис завершен', так как promise2 завершается быстрее.
  • .catch((error) => { ... }): Обработчик ошибок, который будет вызван, если первый завершившийся промис будет отклонен. В данном примере он не используется, так как оба промиса завершаются успешно.

Применение

Promise.race() полезен в ситуациях, когда вам нужно выполнить действие, как только будет доступен первый результат из нескольких асинхронных операций. Например, вы можете использовать его для реализации тайм-аутов, где вы хотите, чтобы операция завершилась либо с результатом, либо с ошибкой, если она занимает слишком много времени.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки