00:00
哈喽,大家好,那这个小节呢,我们接着向前推进。啊,这个小节我们来针对多个回调它的一个指令来做一个实现。在之前关键问题当中有这样一个问题,就是如果为一个promise对象呢,去指定多个回调,这些回调都会执行吗?当时咱们说过,只要状态一发生改变,他们都会是都会去执行的。好了,再来演示一下。把这个自己的先注掉,看一看内置的一个表现。好,再来一次啊。看这弹框没有问题,输出也没有问题。下边呢,我们把自个这个打开保存。刷新页面。哎,你会发现问题。你发现呢,弹框有,但是呢,这个输出这没有。啊,就这个有啊,这个没有。那么这个是怎么回事呢啊。我们来打开代码看一看。那么其实在这个位置呢,在这个位置P,它的状态一定是pending的。
01:05
然后呢,你这个点Z呢,去修改了一下。啊,文中修改应该说是保存了一下,回调就在这儿。保存一下毁掉,但是呢,你下边这个Z方法呢,在这儿P运行的时候呢,这个Z方法运行的时候,它也是pending的,然后你把这两个毁掉,又做了一个保存。啊,其实就是应该不能说是保存,应该是覆盖。所以说这个回调把上边这个回调呢,给覆盖掉了。导致呢,这个结果这个状态在改完之后,他只掉最后一次修改的。之前这个就没了。所以我们用这种方式去进行保存回调函数啊。不太合适。有点欠缺。啊,我们应该怎么办呢?我们应该是把这些回调都得保存起来,而不能说呢只保存最后这一个。所以咱们把代码呢变一下形。怎么变形呢?
02:00
我这个call back。我先给它变成个S,咱们变成个负数啊,然后这个结构呢,我把它变成一个数组。变成数组,然后呢,这个call bags在这啊进行保存时,咱也不直接这样赋值了,咱们这样子点push。我把这个对象呢,然后放进去。啊,大家看一下。这样一子,这样子一来的话,它的意思就变味了啊,你在这儿掉Z,我呢把这两个回调往数组里边去压,当然前提是先把这两个对象,先把这两个函数呢先拼成一个对象,然后压到数组里边。下边这块呢,我再压一次。你可以看一下啊,在两次任意方法调完之后,P这个promise对象,它的一个表现是怎样的。打开。刷新页面。然后点开你瞅一眼,先别管这个报错啊,因为上面代码咱没有改进,所以这块报错很正常,然后点开它。
03:04
那你就会发现在这个promise对象身上呢,它这个call bags里边啊,数组就有两个元素。零一,而且呢,每一个元素都是一个对象,包括成功,成功和失败的一个回调。好了,既然两个咱们都已经保存起来了。那在调的时候,那就不能怎么说呢,不能说单独去倾向了,应该是两个成功的回调都得执行。所以我把这个呢,咱们咔掉写一个便利。好,再来一个self点。Call bags.for each。改个item。首先CF call backs是那个数组啊,然后呢,For便利item的话,在内部就一定会是一个这样的结构。是一个对象。而在resolve这个成功的函数内部,咱们应该是调用的成功的回调,所以应该是item.on resolve的括弧。
04:05
顺便把这个成功的结果得放进去。这样子就可以了。好了,咱们先看结果啊,一会儿再去看失败的。点开它右键刷新。你可以看一下成功有了啊这块啊,输出这块也有了是吧,弹框和控制台都成功了,好了切过来再把失败的回调。放到这儿。Reject。把它卡掉在这儿不能调unresolved,应该是调UN rejected保存啊,执行失败的会掉。好,咱们接下来把这个resolve呢换一下,换成一个reject。啊,No。保存,切过来看结果。你可以看一下啊,弹框和控制台就都有了。好了,这是当前呢,我们给大家实现了一下。啊,就是关于。指定多个回调啊,都执行的这样一个情况。
05:03
好了,我们把这段先保存一下。
我来说两句