js三座大山之异步-Promise三种状态及变化

1、有resolved、rejected、pending三种状态。

2、调用resolve方法会将状态改成resolved,调用rejected方法会将状态改成rejected。

3、状态变成resolved会触发then回调,变成rejected会触发catch回调。

4、then和catch顺利执行会将状态变成resolved,进而触发then回调。

5、then和catch报错会将状态变成rejected,进而触发catch回调。

以下为实例代码:

//场景1
// var p1 = new Promise((resolved,rejected) => {
//     setTimeout(()=>{
//         resolved()
//     })
// }).then(()=>{
//    console.log(1) 
// }).catch((err)=>{
//     console.log(2)
// })
// console.log(p1)

//打印 1

//场景2
// var p1 = new Promise((resolved,rejected) => {
//     setTimeout(()=>{
//         rejected("err")
//     })
// }).then(()=>{
//    console.log(1) 
// }).catch((err)=>{
//     console.log(2)
//     throw new Error("报错了")
// })
// console.log(p1)

//打印 2

//场景3 :连续两次都是fullfill
// var p1 = new Promise((resolved,rejected) => {
//     setTimeout(()=>{
//         resolved()
//     })
// }).then((data)=>{
//    console.log(1) 
// }).catch((err)=>{
//     console.log(2)
//     throw new Error("报错了")
// }).then(()=>{
//     console.log(3) 
//  }).catch((err)=>{
//      console.log(4)
//      throw new Error("报错了")
//  })
//打印 1  3 

// console.log(p1)

//场景4 :报错后继续执行
// var p1 = new Promise((resolved,rejected) => {
//     setTimeout(()=>{
//         rejected()
//     })
// }).then((data)=>{
//    console.log(1) 
// }).catch((err)=>{
//     console.log(2)
//     // throw new Error("报错了")
// }).then(()=>{
//     console.log(3) 
//  }).catch((err)=>{
//     console.log(4)
//      throw new Error("报错了")
//  })
// console.log(p1)
// 打印  2 3

//场景5
Promise.resolve().then(data=>{
    console.log(1)
    throw new Error("err")
}).then(data=>{
    console.log(2)
}).catch(err=>{
    console.log(3)
}).then(data=>{
    console.log(4)
}).catch(err=>{
    console.log(5)
})

//结果打印 1 3 4 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值