Метод Promise.allSettled()

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

В некоторых случаях вы можете захотеть обработать все обещания независимо от того, выполнены они или отклонены. Вот тут-то и появляется Promise.allSettled(). Promise.allSettled() — это новый метод, добавленный в ECMAScript 2020, он позволяет обрабатывать все переданные ему обещания и возвращает массив объектов, содержащих результат каждого обещания, независимо от того, было ли оно выполнено или отклонено.

Вот пример того, как вы можете использовать Promise.allSettled():

В этом примере у нас есть два промиса promise1 и promise2. promise1 разрешается через 1 секунду, а promise2 отклоняется через 2 секунды. Мы передаем эти промисы в Promise.allSettled() метод, он возвращает массив объектов со статусом и значением/причиной каждого промиса.

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

Обратите внимание, что Promise.allSettled() пока не поддерживается всеми браузерами, но поддерживает большинство современных браузеров. Вы можете использовать полифилл для Promise.allSettled() старых браузеров.

Обработка ошибок обещаний

Обработка ошибок промисов — это процесс перехвата и обработки ошибок, возникающих в цепочке промисов. Существует несколько различных способов обработки ошибок в промисах, но наиболее распространенным является использование метода catch().

Метод catch() вызывается, когда обещание отклонено, и он получает ошибку в качестве единственного аргумента. Вот пример того, как вы можете использовать catch() для обработки ошибок в цепочке промисов:

const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject(new Error("Something went wrong"));
    }, 1000);
});

myPromise
.then(result => {
    // This block will not be executed because the promise is rejected
})

В этом примере промис отклоняется с ошибкой через 1 секунду, и вызывается метод catch() с ошибкой в ​​качестве аргумента. Метод catch() выводит сообщение об ошибке на консоль.

Другой способ обработки ошибок в промисах — использование блока try-catch. Вот пример того, как вы можете использовать блок try-catch для обработки ошибок в промисе:

try {
    myPromise.then(result => {
        // This block will not be executed because the promise is rejected
    });
} catch(error) {
    console.log(error.message); // Output: "Something went wrong"
}

В этом примере обещание отклонено с ошибкой, и метод catch() вызывается с ошибкой в ​​качестве аргумента. Метод catch() выводит сообщение об ошибке на консоль.

Важно отметить, что когда вы используете метод catch() для промиса, он перехватит любую ошибку, возникающую в цепочке промисов, будь то ошибка, возникшая в самом промисе, или ошибка, возникшая в обратном вызове then().

Кроме того, вы также можете использовать Promise.reject() и Promise.resolve() для обработки ошибок и возврата результатов соответственно.

Таким образом, обработка ошибок в обещаниях JavaScript является важной частью написания надежного и поддерживаемого кода. Используя метод catch(), вы можете легко перехватывать и обрабатывать ошибки, возникающие в цепочке промисов. И вы можете использовать блок try-catch для более синхронной обработки ошибок.

Ссылка на часть 1: https://medium.com/@shubhambaghel34/heres-what-no-one-tells-you-about-javascript-developer-path-part-1-12f71cb73562