promise有两个阶段:未决阶段unsettled和已决阶段settled
promise有三种状态:pending(进行中)、resolved(已完成,又称Fulfilled)和rejectd(已失败)
代码:
const pro = new Promise((resolve, reject)=>{
// 未决阶段的处理
// 通过调用resolve函数将Promise推向已决阶段的resolved状态
// 通过调用reject函数将Promise推向已决阶段的rejected状态
// resolve和reject均可以传递最多一个参数,表示推向状态的数据
})
pro.then(data=>{
//这是thenable函数,如果当前的Promise已经是resolved状态,该函数会立即执行
//如果当前是未决阶段,则会加入到作业队列,等待到达resolved状态后执行
//data为状态数据
}, err=>{
//这是catchable函数,如果当前的Promise已经是rejected状态,该函数会立即执行
//如果当前是未决阶段,则会加入到作业队列,等待到达rejected状态后执行
//err为状态数据
})
说明:
1. 未决阶段的处理函数是同步的,会立即执行
2. thenable和catchable函数是异步的,就算是立即执行,也会加入到事件队列中等待执行,并且加入的队列是微队列
3. pro.then可以只添加thenable函数,pro.catch可以单独添加catchable函数
4. 在未决阶段的处理函数中,如果发生未捕获的错误,会将状态推向rejected,并会被catchable捕获
5. 一旦状态推向了已决阶段,无法再对状态做任何更改
6. Promise并没有消除回调,只是让回调变得可控
网友评论