Promise既执行then又执行catch

发表于: 2024-08-04 21:39:57

简介: 为什么Promise既执行then又执行catch呢?

记录一下之前的面试的时候遇到的一个问题

面试官:在什么情况下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捕获的错误

最后更新于:2024-08-04 21:39:57