new Promise( resolve => {
setTimeout( ()=> {
resolve();
},1000);
})
.then( ()=>{
console.log('start');
throw new Error('test err'); //下一个catch捕获
})
.catch( err=> {
console.log('I catch', err);
//throw new Error('another err'); //catch返回promise对象
})
.then( ()=> { //catch不throw error,then继续执行
console.log('arrive here');
})
.catch( err=> {
console.log('No, I catch:', err);
});
catch 也会返回一个Promise实例, 如果没有抛出错误,返回的实例也是成功状态的,所以接下来的then都会被执行
注意: 强烈建议在所有队列最后都加上.catch(),以避免漏掉错误处理造成意向不到的问题。
.catch()+.then()
catch也会返回promise实例,并且其中没有抛出错误的话,那么它返回的实例也是fullfiled状态的,所以接下来的then()都会被执行。
catch中如果抛出error,就会使得当前catch返回的实例变为reject状态,从而绕过了then(),进入到下一个catch()函数中

注意:catch返回的是Promise实例

catch 只是 then 的语法糖,本质上与 then 没有什么不同!?
队列最后加catch
一、.catch()之后.then()
catch也会返回一个promise实例,如果没有抛出错误,也会是fulfilled状态,会执行后面的then()。
二、强烈建议在所有队列最后都加上.catch(),以避免漏掉错误处理造成意想不到的问题。
doSomething() .doAnotherThing()
.catch()
.then()
.catch()
catch捕获当前队列的错
一、.catch()之后.then()
catch也会返回一个promise实例,如果没有抛出错误,也会是fulfilled状态,会执行后面的then()。
二、强烈建议在所有队列最后都加上.catch(),以避免漏掉错误处理造成意想不到的问题。
doSomething()
.doAnotherThing()
.doMoreThing()
.catch(err => {
console.log(err);
})
一、.catch()之后.then()
catch也会返回一个promise实例,如果没有抛出错误,也会是fulfilled状态,会执行后面的then()。
二、强烈建议在所有队列最后都加上.catch(),以避免漏掉错误处理造成意想不到的问题。
doSomething()
.doAnotherThing()
.doMoreThing()
.catch(err => {
console.log(err);
})