今天开始和大家一起系统的学习ES6+,每天3分钟,用一把斗地主的时间,重学ES6+,今天介绍的是ES6中新增的内容Promise的then、catch、finally方法,都属于Promise的实例方法,都是存放在Promise的prototype上的。
Executor是在创建Promise时需要传入的一个回调函数,这个回调函数会被立即执行,并且传入两个参数:
new Promise((resovle,reject)=>{
console.log('Executor')
})
const promise = new Promise((resolve, reject) => {
})
promise.then(res => {
}, err => {
})
// 完全等价于下面的代码
// 注意: Promise状态一旦确定下来, 那么就是不可更改的(锁定)
new Promise((resolve, reject) => {
// pending状态: 待定/悬而未决的
console.log("--------")
reject() // 处于rejected状态(已拒绝状态)
resolve() // 处于fulfilled状态(已敲定/兑现状态)
console.log("++++++++++++")
}).then(res => {
console.log("res:", res)
}, err => {
console.log("err:", err)
})
// 1.传入Promise的特殊情况
const newPromise = new Promise((resolve, reject) => {
// resolve("aaaaaa")
reject("err message")
})
new Promise((resolve, reject) => {
// pending -> fulfilled
resolve(newPromise)
}).then(res => {
console.log("res:", res)
}, err => {
console.log("err:", err)
})
// err:reject message
new Promise((resolve, reject) => {
// pending -> fulfilled
const obj = {
then: function(resolve, reject) {
// resolve("resolve message")
reject("reject message")
}
}
resolve(obj)
}).then(res => {
console.log("res:", res)
}, err => {
console.log("err:", err)
})
// err:reject message
console.log(Object.getOwnPropertyDescriptors(Promise.prototype))
const promise = new Promise((resolve, reject) => {
reject("111111")
})
promise.catch(err => {
console.log("err1:", err)
}).catch(err2 => {
console.log("err2:", err2)
}).then(res => {
console.log("res result:", res)
})
// err1: 111111
// res result: undefined
const promise = new Promise((resolve, reject) => {
reject("111111")
})
promise.then(res => {
console.log("res:", res)
}).catch(err => {
console.log("err:", err)
throw new Error("catch return value")
}).then(res => {
console.log("res result:", res)
}).catch(err => {
console.log("err result:", err)
})
// err: 111111
// err result: Error: catch return value
const promise = new Promise((resolve, reject) => {
// resolve("resolve message")
reject("reject message")
})
promise.then(res => {
console.log("res:", res)
}).catch(err => {
console.log("err:", err)
}).finally(() => {
console.log("finally code execute")
})
阅读量:2016
点赞量:0
收藏量:0