我们先分析一下promise 都有哪些功能:
1、promise 是一个类,所以 我们可以使用class关键字声明
2、promise 有三种状态 pending (等待执行) fulfilled (执行成功) rejected (执行失败)
- 状态只能有两种转换方式:
· pending --> fulfilled
· pending --> rejected
- 只要状态发生了改变,这一次promise就算执行完成了。
- 不管结果是成功还是失败,都不会再变成另一种。
3、promise 接收的是一个匿名函数,我们称之为执行器
4、执行器函数有两个回调方法,一个叫做 resolve reject。
- 这两个方法是从 promise 内部调用的并且需要传一个结果出来,所以应该是promise类内部的方法。
- resolve 在执行之后,promise的状态就变成了fulfilled
- rejecte 在执行之后,promise的状态就变成了rejected
5、resolve,reject都有一个参数 来表示成功的结果和失败的的原因,我们将这两个值保存在promise内部,因为在then的时候还会使用到他们
6、promise有一个then方法,它有两个参数,一个是成功的回调方法,一个是失败的回调方法,每个方法都能接收到对应状态的返回结果。
7、异步情况分析
- js 在发生异步的时候 主线程不会等待异步执行完成,会把异步任务交给webApi,让它自己去判断什么时候执行。
- 这个时候,代码在执行到then 的时候,状态还是pending的状态,所以我们执行fulfilledCallBack或rejectedCallBack 并不能拿到返回结果。
- 所以异步的情况 fulfilledCallBack, rejectedCallBack 两个回调方法不能再then里面执行,而是要交给执行器函数里面的成功和失败的回调执行。
- 所以,此时我们可以把fulfilledCallBack, rejectedCallBack 两个函数缓存起来,让resolve reject 去掉用。 // ! 只有异步的情况才缓存
8、同一个promise 的then方法是可以被多次被分两种