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 July 2015.

Метод catch() возвращает промис (Promise() и работает только в случае отклонения промиса. Ведёт себя аналогично вызову Promise.prototype.then(undefined, onRejected).

Syntax

p.catch(onRejected); p.catch(function(reason) { // отказ }); 

Параметры

onRejected

Function вызывается когда промис отклонен. У этой функции один аргумент:

reason

Причина отказа.

Промис, возвращённый catch (), отклоняется, если onRejected выдаёт ошибку(throw) или возвращает Promise, который был отклонён; В противном случае Promise, возвращаемый catch () имеет статус выполнено (fulfilled)

Возвращаемое значение

Описание

Метод catch может быть полезен для обработки ошибок в вашей структуре промисов.

Примеры

Использование метода catch

js
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"); }, ); 

Ловим выброшенные исключения

js
// Выкидываемая ошибка вызовет метод 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

Совместимость с браузерами

Смотрите также