Promise.prototype.catch()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Метод catch() экземпляров Promise планирует вызов функции при отклонении промиса. Он немедленно возвращает другой объект Promise, что позволяет создавать цепочки вызовов вместе с другими методам промисов. Это краткая запись для then(undefined, onRejected).
Интерактивный пример
const promise = new Promise((resolve, reject) => {
throw new Error("Ой-ой!");
});
promise.catch((error) => {
console.error(error);
});
// Ожидаемый результат: Error: Ой-ой!
Синтаксис
promiseInstance.catch(onRejected)
Параметры
- onRejected
-
Functionвызывается когда промис отклонен. У этой функции один аргумент:reason-
Причина отказа.
Промис, возвращённый catch (), отклоняется, если onRejected выдаёт ошибку(throw) или возвращает Promise, который был отклонён; В противном случае Promise, возвращаемый catch () имеет статус выполнено (fulfilled)
Возвращаемое значение
Описание
Метод catch может быть полезен для обработки ошибок в вашей структуре промисов.
Примеры
>Использование метода catch
var p1 = new Promise(function (resolve, reject) {
resolve("Success");
});
p1.then(function (value) {
console.log(value); // "Success!"
throw "oh, no!";
})
.catch(function (e) {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log(e); // "oh, no!"
})
.then(
function () {
console.log("after a catch the chain is restored");
},
function () {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log("Not fired due to the catch");
},
);
// Следующий код ведёт себя также, как вышенаписанный
p1.then(function (value) {
console.log(value); // "Success!"
return Promise.reject("oh, no!");
})
.catch(function (e) {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log(e); // "oh, no!"
})
.then(
function () {
console.log("after a catch the chain is restored");
},
function () {
// Функция не перевыбросила исключение 'e'
// в результате произойдёт resolve(undefined)
// для Promise, возвращённого функцией catch
console.log("Not fired due to the catch");
},
);
Ловим выброшенные исключения
// Выкидываемая ошибка вызовет метод catch
var p1 = new Promise(function (resolve, reject) {
throw "Uh-oh!";
});
p1.catch(function (e) {
console.log(e); // "Uh-oh!"
});
// Ошибки выброшенные из асинхронных функций не будут пойманы методом catch
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
throw "Uncaught Exception!";
}, 1000);
});
p2.catch(function (e) {
console.log(e); // Никогда не вызовется
});
// Ошибки выброшенные после выполнения промиса будут проигнорированны
var p3 = new Promise(function (resolve, reject) {
resolve();
throw "Silenced Exception!";
});
p3.catch(function (e) {
console.log(e); // Никогда не вызовется
});
Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-promise.prototype.catch> |