承诺的实现思路是什么

  介绍

这篇文章给大家分享的是有关承诺的实现思路是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

<强>承诺实现思路的个人理解

我一直觉得承诺虽然方便,但是它的写法很怪,无法理解实现承诺的人是如何思考的。

不过最近我对于实现承诺的思考过程的有了一点点个人理解,特此记下。

感觉这篇文章我还是没有把思路说清楚,时间紧张,就当做一次记录,回头我要把这个过程在表达的在清楚一点。

<强>用例

var p1=new Promise2((解决,拒绝)=比;{   setTimeout(()=比;{   解决(& # 39;你好# 39;)   },1000)      } )      p1。然后(res=比;{   控制台。日志(res + & # 39; & # 39;)   返回res + & # 39; & # 39;   } )   不要犹豫(res=比;{   控制台。日志(res + & # 39;紫薇# 39;)   返回res + & # 39;紫薇# 39;   })

我觉得实现一个函数跟封装组件类似,首先从以下几点考虑:

<李>

1。这个函数用来做什么的?

<李>

2。接受哪些参数

<李>

3。返回值是什么

那么结合例子,和这几个问题,我们得到

<李>

1。<强>承诺是做异步流程控制的。强通俗说就是,我希望某个函数暂时不执行,等我希望它执行时,就解决一下,你这个函数在执行。

<李>

2。<强>构造函数承诺接受一个函数。函数的参数是决心,拒绝,解决和拒绝也是函数,是给用户调用用的,当用户希望下一个异步执行时,就调用解决(0

<李>

3。<强>返回一个承诺实例。承诺实例都有一个然后方法,而那方法也返回一个新的承诺实例。由此就可以链式调然后用了

先实现一个承诺(未实现然后的链式调用) <李>

1.承诺接受一个fn,不管其他,你觉得这个fn在内部会干嘛?只能被调用呗,所以虽然不知道怎么搞,但是先调用一下fn(解决,拒绝)

<李>

2。那这个解决和拒绝不是用户实现的,所以肯定是承诺开发者实现的,那我们要实现解决和拒绝,它们是干嘛的,肯定用来是改变状态的,所以定义this.state

<李>

3.解决和拒绝也会接受用户的参数吧,那我们就需要把这个参数用this.value缓存一下,将来然后方法调用时,需要传递进去

<李>

4。然后接受successFn和errorFn,这2个就是我们希望暂时不执行的函数了。怎么做到暂时不执行呢?就是声明两个数组,把他们先存起来,将来解决时,在调用

类Promise2 {   构造函数(fn) {   这一点。successFnArray=[]//用来缓存successFn和errorFn   这一点。errorFnArray=[]   这一点。=& # 39;状态pendding& # 39;   const解决=(res)=比;{//解决就做2件事情1:修改状态2:调用successFn   这一点。状态=& # 39;实现# 39;   这一点。值=https://www.yisu.com/zixun/res/this.value用来缓存数据数据或者错误      this.successFnArray。forEach (successFn=> {   successFn (res)   } )   }   const拒绝=(err)=> {   这一点。状态=熬芫?   这一点。值=犯错      this.errorFnArray。forEach (errorFn=> {   errorFn (res)   } )   }   fn(解决,拒绝)//先调用fn再说   }      然后(successFn errorFn) {   开关(这一点。状态){   例“完成”:   successFn(这一点。值)//如果调用了决心,状态就成了满足,就会执行successFn   打破   例“拒绝”:   errorFn(这一点。值)   打破   例“悬而未决”:   this.successFnArray。推动(successFn)//如果还没调用决心,状态就是挂件,就先把这些异步函数缓存起来。将来换时调用   this.errorFnArray。推动(errorFn)   }   }   }      var p1=new Promise2((解决,拒绝)=> {   setTimeout (()=> {   解决(“你好”)   },1000)      } )      p1。然后(res=> {   控制台。日志(res +‘世界’)   返回res +‘世界’   })

<>强实现然后链式调用

然后的实现,和金桥的链式调用不同,金桥是每次调用方法后,把这个返回

而承诺规范要求,每次都要返回新承诺的对象

所以只需要把那方法修改一下。

这部分可能会迷惑,但是我想先说一下这里做了哪些事情,其实变化不大

之前的那么做了哪些事情?

承诺的实现思路是什么