Кратко
СкопированоМетод 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 в консоль разработчика и перестанет работать на всей странице.