This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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.prototype.then(undefined, onRejected).

Syntax

p.catch(onRejected);

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

Параметры

onRejected

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

reason

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

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

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

Promise.

Описание

Метод 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

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

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