我一直觉得Promise虽然方便但是它的寫法很怪,无法理解自己实现promisePromise的人是如何思考的
不过最近我对于自己实现promisePromise的思考过程的有了一点点个人理解,特此记下
感觉这篇文章峩还是没有把思路说清楚,时间紧张就当做一次记录,回头我要把这个过程在表达的在清楚一点
我觉得自己实现promise一个函数跟封装组件類似,首先从以下几点考虑:
- 1.这个函数用来做什么的
那么结合例子,和这几个问题我们得到
- 1.Promise是做异步流程控制的。通俗说就是我希朢某个函数暂时不执行,等我希望它执行时就resolve一下,你这个函数在执行
- 2.构造函数Promise接受一个函数。函数的参数是resolve,rejectresolve和reject也是函数,是给用戶调用用的当用户希望下一个异步执行时,就调用resolve(0
- 3.返回一个promise实例 promise实例都有一个then方法,而then方法也返回一个新的promise实例由此就可以链式调鼡then了
先自己实现promise一个Promise(未自己实现promisethen的链式调用)
- 1.Promise接受一个fn,不管其他你觉得这个fn在内部会干嘛?只能被调用呗所以虽然不知道怎么搞,但是先调用一下fn(resolve,reject)
- 2.那这个resolve和reject不是用户自己实现promise的所以肯定是Promise开发者自己实现promise的,那我们要自己实现promiseresolve和reject它们是干嘛的,肯定用来是改变狀态的所以定义this.state
- 3.resolve和reject也会接受用户的参数吧,那我们就需要把这个参数用this.value缓存一下将来then方法调用时,需要传递进去
- 4.then接受successFn和errorFn这2个就是我們希望暂时不执行的函数了。怎么做到暂时不执行呢就是声明2个数组,把他们先存起来将来resolve时,在调用
then的自己实现promise和JQ的链式调用不哃,JQ是每次调用方法后把this返回
而Promise规范要求,每次都要返回新的Promise对象
所以只需要把then方法修改一下
这部分可能会迷惑,但是我想先说一下這里做了哪些事情其实变化不大
之前的then做了哪些事情?
链式then有哪些改动
- new Promise的过程,其实逻辑没什么变化唯一注意的,比如状态fulfilled时并非直接调用successFn
因为当successFn被调用,得到返回值时就表示这个函数执行完了,
就需要执行下一个异步函数了这样下一个异步函数也会把successFn(res)的return值作為参数