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

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

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

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

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

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

Основные методы Promise

  1. then()

    Метод then() используется для обработки успешного выполнения Promise. Он принимает два аргумента: функцию, которая будет вызвана, если Promise выполнится успешно, и функцию, которая будет вызвана, если Promise завершится с ошибкой.

    const promise = new Promise((resolve, reject) => {
        // Асинхронная операция
        resolve('Успех');
    });
    ​
    promise.then(result => {
        console.log(result); // 'Успех'
    });
    

    Здесь resolve('Успех') вызывает первую функцию в then(), выводя 'Успех'.

  2. catch()

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

    const promise = new Promise((resolve, reject) => {
        // Асинхронная операция
        reject('Ошибка');
    });
    ​
    promise.catch(error => {
        console.log(error); // 'Ошибка'
    });
    

    В этом примере reject('Ошибка') вызывает функцию в catch(), выводя 'Ошибка'.

  3. finally()

    Метод finally() выполняется после завершения Promise, независимо от того, было ли оно успешным или с ошибкой. Он не принимает аргументов.

    const promise = new Promise((resolve, reject) => {
        // Асинхронная операция
        resolve('Успех');
    });
    ​
    promise.finally(() => {
        console.log('Завершено');
    });
    

    Здесь finally() будет выполнен после resolve('Успех'), выводя 'Завершено'.

Методы для работы с несколькими Promise

  1. all()

    Метод all() принимает массив Promise и возвращает новый Promise, который выполнится, когда все Promise в массиве будут выполнены. Если один из Promise завершится с ошибкой, all() завершится с ошибкой.

    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']
    });
    

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

  2. allSettled()

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

    const promise1 = Promise.resolve(3);
    const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'Ошибка'));
    ​
    Promise.allSettled([promise1, promise2]).then(results => {
        console.log(results);
        // [{ status: 'fulfilled', value: 3 }, { status: 'rejected', reason: 'Ошибка' }]
    });
    

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

  3. race()

    Метод race() возвращает Promise, который выполнится или завершится с ошибкой, как только один из переданных Promise выполнится или завершится с ошибкой.

    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); // 'два'
    });
    

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

  4. any()

    Метод any() возвращает Promise, который выполнится, как только один из переданных Promise выполнится успешно. Если все Promise завершатся с ошибкой, any() завершится с ошибкой.

    const promise1 = Promise.reject('Ошибка 1');
    const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'Успех'));
    const promise3 = Promise.reject('Ошибка 2');
    ​
    Promise.any([promise1, promise2, promise3]).then(value => {
        console.log(value); // 'Успех'
    });
    

    Здесь any() возвращает результат первого успешно выполненного Promise.

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

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

Твои заметки