Объект Promise представляет возможное завершение (или сбой) асинхронной операции и ее результирующее значение.

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

Справляйтесь с этими отказами!

const willIGetNewPhone = new Promise(
    (resolve, reject) => { // fat arrow
        if (isMomHappy) {
            const phone = {
                brand: 'Samsung',
                color: 'black'
            };
            resolve(phone);
        } else {
            const reason = new Error('mom is not happy');
            reject(reason);
        }
}
);

(Эта функция имеет критерии отклонения, учитывающие вероятность того, что что-то не получится.)

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

.catch(error => console.log(error.message));

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

const askMom = () => {
    willIGetNewPhone
        .then(showOff)
        .then(fulfilled => console.log(fulfilled)) // fat arrow
        .catch(error => console.log(error.message)); // fat arrow
};

Вариант использования

При отправке сообщения в API это обычно хорошо с ответами. В этот конкретный день он перегружен огромным количеством звонков. Ты не мудрее. Ваши Обещания возвращаются отклоненными, но у вас нет плана на случай непредвиденных обстоятельств (a ​.catch()). Ваше приложение разваливается, так как нечего отображать.

Используйте отказы в своих интересах и создавайте более жесткий код Asnc.