Кратко
СкопированоМетод catch
используют для обработки ошибки при выполнении асинхронной операции.
Метод принимает один аргумент:
on
— функция-колбэк, которая будет вызвана при переходе промиса в состояние «ошибка»Reject rejected
. Функция имеет один параметр, в который передаётся информация об ошибке.
Возвращает промис.
Как пишется
Скопировано// getPasswords() — асинхронная функция, которая возвращает промисgetPasswords() .then(function (result) { // выполнится, если операция успешна }) .catch(function (err) { // колбэк выполнится, если getPassword завершится ошибкой alert(err.message) })
// getPasswords() — асинхронная функция, которая возвращает промис getPasswords() .then(function (result) { // выполнится, если операция успешна }) .catch(function (err) { // колбэк выполнится, если getPassword завершится ошибкой alert(err.message) })
Как понять
Скопированоcatch
выполняет переданный ему колбэк когда асинхронная операция:
- вызывает функцию
reject
внутри промиса.( )
const rejectInSecond = new Promise(function (resolve, reject) { setTimeout(function () { reject(new Error('время истекло')) }, 1000)})rejectInSecond.catch(function (err) { console.error(err.message) // 'время истекло'})
const rejectInSecond = new Promise(function (resolve, reject) { setTimeout(function () { reject(new Error('время истекло')) }, 1000) }) rejectInSecond.catch(function (err) { console.error(err.message) // 'время истекло' })
- выбрасывает ошибку с помощью
throw
.
const throwInSecond = new Promise(function (resolve, reject) { setTimeout(function () { throw new Error('время истекло') }, 1000)})throwInSecond.catch(function (err) { console.error(err.message) // 'время истекло'})
const throwInSecond = new Promise(function (resolve, reject) { setTimeout(function () { throw new Error('время истекло') }, 1000) }) throwInSecond.catch(function (err) { console.error(err.message) // 'время истекло' })
🔧 Техническая деталь
Под капотом catch
содержит вызов then
, где первый колбэк установлен в undefined
: catch
→ then
.
На практике
Скопированосоветует Скопировано
🛠 Всегда завершайте свои цепочки промисов вызовом метода catch
. Если в одной из операций в цепочке произойдёт ошибка, и она не будет обработана, то JavaScript выведет сообщение Uncaught
в консоль разработчика и перестанет работать на всей странице.