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
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 |