场景题:Promise的then和catch如何影响状态的变化?

本文介绍了Promise的then和catch方法在处理异步操作时的流程控制,包括正常返回和抛出错误的情况。通过示例解析了如何在链式调用中捕获和传递错误,以及如何影响后续then和catch的执行顺序。

第一题

Promise.resolve().then(() => {
        console.log(1)
}).catch(() => {
        console.log(2)
}).then(() => {
        console.log(3)
})
1 3

第二题

Promise.resolve().then(() => {
    console.log(1)
    throw new Error('error1')
}).catch(() => {
    console.log(2)
}).then(() => {
    console.log(3)
})

1 2 3

第三题

Promise.resolve().then(() => {
    console.log(1)
    throw new Error('error1')
}).catch(() => {
    console.log(2)
}).catch(() => {
    console.log(3)
})
1 2

原理

then正常返回resolved,里面有报错返回rejected

const p1 = Promise.resolve().then(() => {
    return 100
})
//console.log('p1',p1)//resolved触发后续then的回调
p1.then(()=>{
    console.log('123')
})

const p2 = Promise.resolve().then(() => {
    throw new Error('then error')
})
//console.log('p2', p2)//rejected触发后续catch的回调
p2.then(() => {
    console.log('456')
}).catch(err =>{
    console.error('err100',err)
})

catch正常返回resolved,里面有报错返回rejected

const p3 = Promise.reject('my error').catch(err => {
    console.error(err)
})
//console.log('p3',p3)//resolved 触发then回调
p3.then(() => {
    console.log(100)
})

const p4 =Promise.reject('my error').catch(err => {
    throw new Error('catch err')
})
//console.log('p4',p4)//rejected触发后续catch的回调
p4.then(() => {
   console.log(200)
}).catch(() => {
    console.error('some error')
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值