Promise 中 reject 和 catch 处理上有什么区别?

1,309 阅读1分钟
// 一、
promise.then((res) => {
    console.log('then:', res);
}).catch((err) => {
    console.log('catch:', err);
})
// 二、
promise.then(res => {
    console.log('then:', res);
}, err => {
    console.log('catch:', err)
  })

代码一catch 方法可以捕获到 catch 之前整条 promise 链路上所有抛出的异常。

代码二then 方法的第二个参数捕获的异常依赖于上一个 Promise 对象的执行结果。

promise.then(success, faild) 接收两个函数作为参数,来处理上一个promise 对象的结果。then 方法返回的是 promise 对象。

上面是链式写法,使用catch,相当于给前面一个then方法返回的promise 注册回调,可以捕获到前面then没有被处理的异常。

下面是回调函数写法,仅为为上一个promise 注册异常回调。

如果是promise内部报错 reject抛出错误后,then的第二个参数就能捕获得到,如果then的第二个参数不存在,则catch方法会捕获到。

如果是then的第一个参数函数 resolve 中抛出了异常,即成功回调函数出现异常后,then的第二个参数reject 捕获捕获不到,catch方法可以捕获到。

两者的区别

1、reject 是 Promise 的方法,而 catch 是 Promise 实例的方法

2、reject 是用来抛出异常,catch 是用来处理异常

3、reject 是 Promise 的方法,而 catch 是 Promise 实例的方法

4、reject后的东西,一定会进入then中的第二个回调,如果then中没有写第二个回调,则进入catch

5、网络异常(比如断网),会直接进入catch而不会进入then的第二个回调