Promise.then 的错误处理
分析 Promise.reject 在 then 方法中的错误处理流程
问题
下面代码的输出是什么?
Promise.reject('err!!!')
.then((res) => {
console.log('success', res)
}, (err) => {
console.log('error', err)
}).catch(err => {
console.log('catch', err)
})
解答
.then() 方法接收两个参数:
- 第一个参数:处理 Promise 成功状态的回调函数
- 第二个参数:处理 Promise 失败状态的回调函数
当 Promise 状态为 rejected 时,会直接进入 .then() 的第二个参数(错误处理函数),而不会继续传递到后面的 .catch()。
因此,Promise.reject('err!!!') 的值会被 .then() 的第二个参数捕获并处理。
输出结果:
error err!!!
关键点
.then()的第二个参数可以捕获 Promise 的 rejected 状态- 如果
.then()的第二个参数已经处理了错误,.catch()不会再执行 .catch(err => {})等价于.then(null, err => {})- 只有当
.then()没有提供错误处理函数时,错误才会传递到.catch()
目录