00:00
Hello,大家好,那这一个小节呢,我们开始进行promise的自定义的封装,又称之为手写promise。我们会通过呢自己的封装来实现啊,这个全局或者内置的promise它所有的功能。啊,就咱们之前讲的那些API,到最后呢,我们都会自定义的去实现,它可以怎么使用,我们自定义的就可以什么就可以怎样去使用。那其实总总体来看的话,这个实现是比较困难的,或者比较有比较有难度的。不过的话啊,我们呢,对这块内容做了一个拆解啊,我们把这个呢,整体的功能啊,拆成一块一块的,就跟游戏闯关一样子,等我把所有的关卡都做完之后,那整体的功能也就完全都实现了,好呃,首先的话,我们这一个小节先来做第一个部分就是整体的结构的初始化的搭建。首先我先来创建一个对象。
01:05
然后在里边呢,我们通过这个函数呢,将promise这样状态呢变为一个成功。啊,下边呢,通过。任方法。来对他成功和失败的结果呢去做一个处理。这是失败的。啊,这呢是成功的。我们接下来的话呢,打开浏览器去运行一下它,看看这个结果,这个结果一定是运行十五行输出,OK。打开。好,你可以看一下十五行,OK,没有问题,这个呢是全局的那个promise。啊,对象由他实例化出来的。那么现在的话,我们想想要自定义。我们就要去覆盖它全局,那个不用它内置的了啊,我们用自己的。新建一个文件。写一个promise.gs。
02:00
然后呢,在这个位置呢,我使用标签把它引进来。好,你先之后咱们在这个文件里边干什么呢?我们首先要先把这个全局的promise这一个值给它替换掉。这个是可以覆盖的。啊,我只要我只要这样这一声明,那么在new的时候就是new我这个promise,而不再是全局的那个promise了。好,可以来看一看代码,刷新页面,此时你就会发现他报错了,他报什么错?他说p.z is not a function,好,为什么说p.Z这块会报错呢?因为你注意观察在这一个。构造函数的原型上边就是显示原型对象上边是没有Z方法的,它原型上没有那P,它这个实例对象的隐式原形链上面就没有这个啊Z方法,所以说为了能够让它去正常调用Z方法,我们需要在这。
03:03
啊去添加。Then这个方法。怎么添加呢?啊,我们写一个promise.pro.then。等于一个function。而且你注意观察,他这块呢,会接收两个参数,这是两个实参。那两个食参的话,在声明时就得有对应的两个行参。啊,那么第一个咱们写一个unresolved,第二个呢,UN rejected。好了,Z方法的整体结构咱们就已经答完了。搭完之后呢,你还别着急啊,为什么呢?因为你看这儿。在promise实例化的时候,它呢,这也接收一个参数。看这。这是一个食参,所以说在promise声明的时候呢,这里边儿得有一个行参。Executor。啊,执行器函数。OK,搞定,接下来咱们来看一看它还报错不报错?点开它刷新页面。
04:05
好了,这个时候的话,代码就不报错了。好,到这儿的话,我们就把基本的结构呢,先搭好了啊,咱们这个小节呢,先到这儿,然后下一个小节开始实现里边的一些代码。
我来说两句