先看例子:
异常穿透,不执行then,直接执行catch
let p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('第一种err');
}, 2000)
})
p.then(res => {
console.log(111); //2s后不会输出111
}).then(res => {
console.log(222); //2s后不会输出222
}).catch(err => {
console.log(err) //最终直接走这里哈
})
执行结果:
第一种err
let p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('第一种err');
}, 2000)
})
p.then(res => {
console.log(111); //2s后不会输出111
},res=>{
console.log("rej1")
}).then(res => {
console.log(222); //2s后不会输出222
},res=>{
console.log("rej2")
}).catch(err => {
console.log(err) //最终直接走这里哈
})
执行结果:
rej1
222
也就是说执行了第一个then的reject回调,然后执行第二个then的成功回调