记录一下之前的面试的时候遇到的一个问题
面试官:在什么情况下Promise既走then又走catch?
在 Promise 的 resolved 回调函数中存在了错误的代码,这时就会在 rejected 回调函数中抛出异常。其实就是因为 Promise 对象的错误具有"冒泡"性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。
示例
function httpRequest() {
return new Promise((resolve) => resolve())
}
httpRequest().then(() => {
console.log(1);
const a = b
}).catch(() => {
console.log('我进入了catch事件');
})
// 执行结果:1 -> 我进入了catch事件
// 如果在then内使用了try catch,那么就不会进入到Promise的reject回调中了
```javascript
function httpRequest() {
return new Promise((resolve) => resolve())
}
httpRequest().then(() => {
try {
console.log(1);
const a = b
} catch (error) {
console.log('我是内部try catch捕获的错误');
}
}).catch(() => {
console.log('我进入了catch事件');
})
// 执行结果:1 -> 我是内部try catch捕获的错误