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