00:00
好,我们这里面写的还有一个问题,但是我们得测才能发现这个问题啊,我估计的开始没有说来把这个先简单的做一个最简单的实现,我们点认是不是指定成功或者失败的回流函数,那我们现在就假设。状态还没有,还是喷底状态,那我应该要干嘛呀?你说我在函数里面应该干嘛去,当前还是喷底状态,我调用点认能执行回答是吗?我得把回答做什么处理。状态还没有状态还是你喷状态,不用我这个点来改。是把它保存起来,状态我改不了。是不是,我是不是得把这两个函数给他什么,是不是存起来。那这个其实很简单啊,就是我这个点什么。
01:02
This不就是promise对象吗?它里面应该有个什么属性来存回调函数的是对吧?接着我是不可以来个故事。Push的元素是个什么类型?我。和这个对象里面应该有几个方法呀,两个名字分别叫什么的和是不是,那应该是谁。是不是就这两个字,是不是就这两个函数,那我是不是可以简写。这是最最简单实现啊。这个实现肯定是不够的,你想认要这么实现,那我肯定不会开始反复强调了啊,先做最简单的实现,听懂吗?现在我们实验的方案是先假设。
02:00
是一个假设的,对不对,假设什么。当前状态还是什么盆顶状态,干嘛去将回掉函数保存起来?是吧,保存起来是不是有专门的位置,对好来有了这些,我们整个前面写的及时就通了啊,只是要求一个事情,要求我们呢,得先指定回调函数再改状态,我现在是这样吗。我现在是吗?你说我现在是先干嘛后干嘛,先改的状态后指定的回调函数是不是,我得把这个顺序改一改吧。是吧,那顺序改改怎么改呀啊,是不是给他延迟一点时间是不是就可以啊,延迟一个百都行,是不是再延迟一点点,其实加个零都行,好注意我在这里面是不是用P点任指定的两套回调函数,好,我来在这里面写一下,我来看一下啊这个假设我叫他reserve的一可以吧,那他介绍的外角应该是几应该几一,但是我这个失败的会掉吗?
03:29
不会,因为我前面是不是没有调瑞,那等会我再改啊,一个一个来测啊,这是一好了,这个是reason是吧,把这个去掉啊,去掉它,但是呢,我把这一个是不是复制一个是吧,再把这一个给他什么。改了相当于我是不是指定了两套回调函数,成功了两个,失败的是不是两个,那也就是说如果说这两个能执行,是不是就能说明问题。
04:04
是吗?因为我成功了吗?是不是概念概念啊。来。我没什么哦,我现在还不是用的我的是不是用的他的老用我的。打开。是没有是吧,没有吧,没有也没看到报错是不是。但是效果是没有达到我的效果,这个叫什么呢?这个叫功能性bug,就是咱那个开发项目的时候,有两种bug,一种叫异常性B,或者叫错误bug,什么叫错误bug,就报错了,就控制台有错误输出,告诉你哪个文件哪一行是吧,是最爽的,那还有一种bug呢,他也没报错。
05:06
是吧,啊,效果也不是我想要的效果,按理论来说,我觉得我写的挺好的是吧,应该要出来打印是不是,但他现在是不是又没有。好,那我们现在就得调试一下。啊,我们代码确实是有问题啊。有我可能想的问题,也有可能我没想到的问题。我们下面一步就是调。调试其实非常简单,就是要打断点进行查看,这是我的啊,页面里面嵌套的一些使用的代码,那我就从哪开始挑起了,比如说我就在这打个点可以不?啊,刷新一下,我是不是可以进入这一个。还是内部?可不可以,可以,那我来干嘛?是不是点它记录。是不是进来了,进来注意啊,因为做先给this是不是添加了一个pending的一个状态属性,这个this看看是谁。
06:07
是谁,这个是显示的这个类型是promise是吧?是大写的吗。是他吗?不是,那它为什么显示这个大小方米呢?告诉我。或者说这个显示的是跟我的这个认识有什么关系。显示的是我的类型名称,前面我跟你说过这个事情吗?那你现在是。我的意思什么类型,大写类型。类型指的什么?在JS里面?类型在JS里面是什么体现的?比如说我的person是person类型都是怎么体现的呀,在JS里面。嗯。怎么体现的,我怎么判断一个对称类型。
07:05
那只能判断基本类型。我是引用类型,到底什么类型呢?医生,我右边写什么。右边写什么,那你说在JS类型指的什么东西?我要定义一个新的类型,比如说我要定一个人的类型,我是要定一个程序。构成函数,那也就是说反过来说,那就那顺下说了,你在层面谁来体现类型呢?那不对了吗。你不是根据构图函数创建那个类型的使命吗?那由构造函数是JS里面体现类型的一个东西啊,对不对,而我现在显示的是不是这个类的类型是promise。他为什么不是小写是大写的?赢我的那名,我的这个就是大写的。
08:01
我跟你说,我要写小写,他也写小写的,但我不应该这么做。当然,如果ES6的语法出来了,Class类也是一个类型,对不对啊,类就专门用来做类型的,但是构造函数啊,函数不是不一定是做类型,你只有六的时候,那时候它才是类型,你才是构造函数。能听懂吧,嗯。好来注意我现在认识里面是不是有了。继续揉啊,现在应该是有date了。而且是喷嚏,是不是能看到接着走。现在我是不是执行我这个执行器函数去了,那我想进去看一下怎么执行呢,我怎么办。是不是得进去。是可以进去报,而且进去之后我是不是说过一秒以后执行。是吧?
09:00
那我可以在这打个单点可以不。可以啊,接着去执行他们啊相关的一些代码。啊,这个执行器是不是就执行完了,但执行器执行完了,那个电器实际上是启动了吧,只是还没到时间嘛,因为我现在调调试实际上已经到时间了,但是我在调试给他阻断了嘛。啊,来看一下现在是不是到达14行了,是不是执行了,其实刚才我一个没没看,就是这个P点任执行没有,我问大家。执行没有?执行没有?P点执行过没有,我现在14上在执行P点任执行过没有?这都不知道啊。刚才咱还不说嘛啊,搞个定时器,让他先执行,让他后执行,让这个回调还是后执行对不对。是吧,那也就是说现在P里面应该存除了回调函数对不对。
10:02
对吧,你看有没有。是有两个成功和两个失败的,是不是两个对象,每个对象里面都有一个成功的,还一个什么失败的。我的data现在是卖了吧,我的那个state是当前是喷你吧。为什么?因为我还没吊水,里面怎么做的,我是不是得进去看一下干嘛?进去。是不是这个?他说如果当前是pending this.state不是pending,那我。是不是就结束当前是不是你是。但是我是不是写错了,肯定哪个位置名字写出来怎么着。得看一看。主要是这个this是谁?This是谁完蛋?我的this希望是谁?
11:02
Promise。为什么现在是window?为什么现在这是得看你这个函数怎么被调用的,是不是我是怎么被调的,是不是直接调用。何为直接调用啊?函数名括号。是不是?这不行啊,这不对呀,是不是问题是不是就是在这里。你看,如果我不通过第八调试,那怎么知道嘞。是什么道理?好,那我怎么改了,怎么样让它能够是那个组件对象呢?不是组件对象是pro对象呢?这你意思是不是都不对,咋办?你要知道外面的对不对,对的,但是里面是不是对了,改成的函数。
12:03
啊嗨了。在ES里面其实有一种统一的做法,我用一下ES5里面的做法看好很简单。把存起来。啊,比如说叫随便取个名字。是不是说白了,是不是将promise对象。将当前什么promise对象?啊,保存起来,保存起来是为了将在后面别的函数里面使用。试一试吧,来,那也就是说后面的this都给我写的什么?So,当然以后位置啊,命名成me啊,命名成that呀,甚至有地方命名成下划线认啊。Broken。有不懂,好,那我是要把这个识变成什么来看,好CTRL加F。
13:09
是不匹配上里面所有的认啊,把它换成什么呢?CF你可以去点它一个一个换,也可以去点它是么?全部替换,你要有信心你就点右边这个,你要没信心就一个一个点。啊,就换一个看一下,换一个看一下是不是对不对啊有信心点。但有信心其实就错了一点。这啥呀?这个写什么?是道理,不是道理,那你说现在我们是不是把该换的是不是都换了?那就是说现在这个是不是都是代表的是promise对象了。对吧,非常好。来我我这样啊,注意有一个操作是这个。
14:03
我不打了一些断点吗?我觉得我改的差不多了是不是,但是呢,我一定改对了吗。不一定,我先临时的这个操作,我先临时让这个断点失效。我整个让他再走一遍,你看。啊,他是没有进入我的这某里面,诶这个地方看好了push啊说什么呢,说74行三减什么。扣,这个有问题,这个我有定义下吗。这是另外一个函数啊,我还不还有这个函数,这个里面本来也写个认的,这个认里面本来这是对的,知道不,但是我是不是刚才统一换成了S啊,那我要这么做,后面也可能内部有欠的函数,所以我干嘛。是不是也可以给他存一下可以吧。可以。好,后面你就通过来访问啊,Promise对象是没有问题的,是不是来再刷新一下。
15:04
有没有打印输出成功了,吃饭了。是不是成功了?成功了啊好,那成功了,那我怎么样的失败了。叫什么?是不是还一个,我还要验证一个事情,他到底是。同步调用呢还是异步调用呢?我得去测试一下怎么测试。大家知道我指定回调函数的时候,他调回函数,指定回调他掉了吗?这掉了吗?没有,是不是这个时候没有什么成,嗯,异步的问题,也就此时我是把这个回答说放到异步对面里面去吗?没有,我是放到我的一个数组容器里面的吧。好,是不是在执行它的时候。
16:01
才触发了这个失败的回调函数执行,而且我们说我们是不是异步执行的。怎么验证他是亦不执行的?怎么验证这个,也就是说这个方法调用会触发我们的回调函数执行是不是。那我怎么知道它是异步执行还是同步执行呢?说白了,如果它是同步执行的,它执行完了以后,它这个函数才结束。能听懂不。而如果它是一步自行车。也就是说我去错之前,我是立即执行它吗?不是,是不是把它放到回在队列里面,那我这个方法是不是就结束了,那也就是说在我这个方法结束的时候,我这个函数执行了吗?有没有?还没有哇。那你说我怎么验证这个事实啊,我怎么验证这个方法结束以后,他还没执行呢。
17:08
我怎么验证这个函数执行结束以后,他还没执行。这都不知道。我到哪去写打印,关键是我都知道要写打印,关键是哪写打印,关键就是这个对15号之后很好。这不就是改变状态之后吗?对不,状态改变是都是同步改变了,对不对,力就改变,但是回调函数是什么。义务执行了对不对,我就想验证这个事实,对吧。打开。看好了。也就是说我能推断出来啊,要看到他先执行。其他的几个什么后执行才能说明我们的回调函数是什么义务执行的OK,好,可以走你。
18:03
对不对。能不能看到。可以吧,可以。嗯,那就说明我们的这一个。整个就写好了。这一个这个巧了,这一个做了一个最简单的实线,那完全不够,这个点任的实间完全不够。嗯。啊,其实这里面有几个东西啊,其实就分为几个部分。一个啊,一个部分是我要准备是不是一些给我的promise对象准备三个属性。是吧,哪三个属性呢。是状态是吧,Date数据属性,其实我没给值是不是,因为现在我也不知道给什么值,你让我给我也给不了是吧,还一个是用来干嘛的。缓存回调函数的对不对?
19:01
是吧?还有一个啊,我们需要去调用什么。执行器,但是一旦调用执行,要准备几个函数?两个一个函数,一个什么函数,也就说这两个函数是我定义的吗?是我外面的调用的定义的吗?不是,是不是内部定义好的,但是由谁来调用。由谁来调用?由定义者调用还是由使用者调用?是不是有外部使用者调用?说白了,怎么改状态,怎么存数据,是不是由内部决定,但是什么时候执行,由谁决定,由外部调用的决定,执行哪一个,是不是由外部调用的决定。怎么做,他是不是已经给你搞好了?这不就体现了封装的特点嘛,封装就是我把很多东西封装,封装好了,封装很多函数对不对,封装很多方法,那我开始掉吗?我有有的调,我有的不掉是不是,有的是我自己调,有的是给你掉是不是?
20:03
嗯。Promise,现在你可以基本上把它理解成一个封装异步操作的一个小的一个微型的库。那你得知道啊,我们要立即去调用执行器啊,下面啊,包括这个这个好理解,其实这个你只要知道,如果我的执行器里面破了异常,那我的promise得变成什么状态。失败的状态。第三个大的部分就是要去实现什么呢?其实这个好实现。啊。这个判断是一个是一个优化的处理啊,开始我就没写,是不是我们重点是不是要改状态,保存数据,同时还要干嘛去。不执行待执行的回调函数,既然有待执行,说明是不是提前已经有任调过了?
21:00
对不?答案一定有吗?伊利有吗?不一定,先后顺序是无因的,对不对,这我们说过,所以我前面是不是有判断的。对啊,一定要干嘛。是不是异步执行回调函数,回调函数啊,成功或失败的回调是异步执行的。那你这个人写下面的这个也能写一样的是不是。一样的,这个呢,我们做了最最简单的实验,这个并不难,这个只是来说非常简难。啊,我们现在是不是有一个假设的前提对吧。嗯。嗯,行。
我来说两句