00:00
哈喽,大家好,这一个小节呢,我们来封装一下另外一个方法,那就是race方法,这个方法呢,我们之前也演示过,它呢接受一个参数。啊,也是一个由组成的数组,它的返回结果呢,也是一个promise对象,这个对象的状态呢,由这个数组当中最先改变状态的那个promise决定。谁先改变状态,谁的状态就决定了这个结果的状态,而且它的结果值也决定了返回结果的这个它的结果值。好,我们可以来先看一看。这个代码的话,P1 p2P3先后顺序谁先改变状态呢?P1先改变。啊,所以说呢,在这个时刻是。P作为race的返回结果,应该说P1决定了好瑞的返回结果为一个成功,我们可以来看一看。
01:05
好,点开它,你可以看到状态呢,是一个成功值呢为OK,没有问题,好,那如果说我呢,把它变了,变成一个异步的啊,我呢没有加时间,没有加时间的话就是零秒,其实零秒它也是一个异步的,在这儿的话是由P2他先改变状态。他先改变完状态,之后,由他决定了瑞士方法的返回结果展开。可以看一下状态为F的成功,然后值为success。好了,这是当前的内置promise的一个表现,下边我们来看一看我们的好使不好使刷新。报错了,说promise race is not a function啊,我们这呢,并不是一个函数,所以咱们在这添加一下。
02:01
啊,瑞士。方法promise点等于一个function,它的结构呢,跟all方法结构是一样的啊,返回结果return new promise OK,然后在这。我们还是一样要对这个promise的数组进行一个遍历for循环,Let I等于零,I小于promises,然后点length,哎,加加,然后在这个位置,我们需要去对这个promise这样进行Z方法的调用,Promises下标i.Z然后V,这是一个回调,然后再来一个回调,啊,如果说你这个promise这样状态要是变为了成功。你就走这儿。啊,执行第一个回调,执行第一个回调干嘛呢。
03:02
我们就去改变返回结果的这个对象。他的状态成功。注意啊,这块就决定了返回这个promise对象它的一个结果状态,同学说,哎,我们这不需要去判断是不是到最后了吗?这里不需要啊,我们直接去改就行啊,谁先去运行谁就决定了结果,无论成功还是失败都是如此。啊,都是如此。啊,你比方说这个对象,他现在肯定是不能够先去改变,先去执行里边回调,为什么呢?因为他得等一会儿,它是异步的一个回调,那所以说P2它呢,状态已经改成成功,它就执行里边的回调。
04:00
一执行里边回调直接调resolve,就把这个race方法的返回结果变为了成功了,那么这个时候如果T3它哪怕是一个失败的。这个地方它掉,它能掉吗?它能掉,但是它已经不能改变这个结果的对象状态了。这就是赛跑,谁先状态改变完,谁就可以呢去运行里边代码,对返回的结果进行一个状态控制。啊,这就是瑞士方法的封装比较简单,咱们来看一看效果怎么样,右键刷新。点开它状态呢为成功,这个值呢为success,没有问题啊,比方说这块呢是失败的,你失败也是一样子,谁先改变状态,谁就决定结果,你是失败的也是一样子,你一改变这一叫Z,然后这一叫resolve,就把这个对象的状态给修改了。好了,这是当前的话,咱们对race方法的一个实现。
我来说两句