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

Какие знаешь статичные методы у Promise

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

Promise имеет несколько статичных методов: Promise.all(), Promise.allSettled(), Promise.race(), Promise.any(), и Promise.resolve()/Promise.reject(). Эти методы позволяют работать с несколькими промисами одновременно, управлять их выполнением и обрабатывать результаты.

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

В JavaScript Promise — это объект, представляющий результат асинхронной операции. Статичные методы Promise позволяют работать с несколькими промисами одновременно, что упрощает управление асинхронными задачами. Рассмотрим каждый из них:

  1. Promise.all(iterable)

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

    const promise1 = Promise.resolve(3);
    const promise2 = 42;
    const promise3 = new Promise((resolve, reject) => {
      setTimeout(resolve, 100, 'foo');
    });
    ​
    Promise.all([promise1, promise2, promise3]).then((values) => {
      console.log(values); // [3, 42, "foo"]
    });
    
    • promise1 и promise3 — это промисы, которые будут выполнены.
    • promise2 — это обычное значение, которое будет обработано как выполненный промис.
    • Promise.all возвращает промис, который выполнится, когда все промисы в массиве будут выполнены, и вернет массив их значений.
  2. Promise.allSettled(iterable)

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

    const promise1 = Promise.resolve(3);
    const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'error'));
    ​
    Promise.allSettled([promise1, promise2]).then((results) => {
      results.forEach((result) => console.log(result.status));
    });
    // Output:
    // "fulfilled"
    // "rejected"
    
    • Promise.allSettled возвращает промис, который выполнится, когда все промисы завершатся, независимо от их состояния.
    • Каждый элемент в возвращаемом массиве содержит объект с status и value или reason в зависимости от результата промиса.
  3. Promise.race(iterable)

    Этот метод принимает итерируемый объект промисов и возвращает промис, который выполняется или отклоняется, как только любой из промисов в итерируемом объекте выполнится или отклонится.

    const promise1 = new Promise((resolve, reject) => {
      setTimeout(resolve, 500, 'one');
    });
    ​
    const promise2 = new Promise((resolve, reject) => {
      setTimeout(resolve, 100, 'two');
    });
    ​
    Promise.race([promise1, promise2]).then((value) => {
      console.log(value); // "two"
    });
    
    • Promise.race возвращает промис, который выполнится или отклонится в зависимости от того, какой из промисов завершится первым.
    • В данном примере promise2 завершается первым, поэтому возвращается его значение.
  4. Promise.any(iterable)

    Этот метод принимает итерируемый объект промисов и возвращает промис, который выполняется, как только любой из промисов выполнится успешно. Если все промисы отклоняются, возвращаемый промис отклоняется с AggregateError.

    const promise1 = Promise.reject('error1');
    const promise2 = new Promise((resolve, reject) => {
      setTimeout(resolve, 100, 'success');
    });
    ​
    Promise.any([promise1, promise2]).then((value) => {
      console.log(value); // "success"
    }).catch((error) => {
      console.log(error);
    });
    
    • Promise.any возвращает промис, который выполнится, как только любой из промисов выполнится успешно.
    • Если все промисы отклоняются, возвращается AggregateError, содержащий все причины отклонения.
  5. Promise.resolve(value) и Promise.reject(reason)

    Эти методы возвращают промис, который выполнен с переданным значением или отклонен с переданной причиной соответственно.

    const resolvedPromise = Promise.resolve(42);
    resolvedPromise.then((value) => {
      console.log(value); // 42
    });
    ​
    const rejectedPromise = Promise.reject('error');
    rejectedPromise.catch((reason) => {
      console.log(reason); // "error"
    });
    
    • Promise.resolve создает промис, который сразу же выполняется с переданным значением.
    • Promise.reject создает промис, который сразу же отклоняется с переданной причиной.

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

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

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

Твои заметки