一、promise定义
Promise是一个代理,将处理程序与异步操作的成功值或失败原因关联起来,使异步方法可以像同步方法一样返回值,Promise的返回值是一个新的Promise对象。
Promise对象包括状态值PromiseState和返回值PromiseResult
- 状态值PromiseState:
- pading-待定:初始状态,没有兑现也没有拒绝
- fulfilled-已兑现:操作成功
- rejected-已拒绝:操作失败
Promise的状态值为已兑换或已拒绝,即不再处于待定状态,那么则称之为已敲定(settled),已敲定的值不能更改状态值。
二、promise链式调用
一个Promise对象的执行会得到一个新的Promise对象,这个新的Promise对象的执行又会得到一个新的Promise对象,使用then方法执行成功的回调,上一个成功的返回值通过then方法会返回到下一个then方法,层层传递,当出现拒绝状态使用catch方法执行失败的回调,返回错误的原因。像这种方法连续调用的形式 ,我们称作链式调用。
promise.then(filfilledA).then(filfilledB).then(filfilledC).catch(rejected)
//箭头函数实现
promise.then(value=>xxx).then(value=>xxx).then(value=>console.log(value)).catch(err=>console.error(err))
三、thenable对象
thenable对象实现.then()方法,方法被调用时需要传入两个回调函数,一个用于promise被兑现时调用,一个用于promise被拒绝时调用。promise是thenable对象
js允许promise位置使用thenable对象
const aThenable={
then(onFulfilled,onRejected){
onFulfilled({
then(onFulfilled,onRejected){
onFulfilled(42)
}
})
}
}
Promise.resolve(aThenable)
Promise.resolve可以解析Promise对象,也可以追踪thenable对象
四、Promise构造函数
通过构造函数,封装未支持Promise的基于回调的API
new Promise(executor)
- 参数
executor 构造函数执行function。接受参数resolveFn和rejectedFn,rejectedFn抛出的错误,被Promise拒绝,忽略返回值
- 返回值
调用promise构造函数,返回promise对象。
当resolveFn和rejectedFn被调用时,Promise对象变为已解决状态。当调用resolveFn和rejectedFn被调用且传入下一个Promise中作为参数时,Promise对象状态变为已解决,但是Promise状态处于未敲定状态(Promise整体还未完成调用)