// 一、
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的第二个回调