00:00
哈喽,大家好,那这个小节呢,我们继续向前推进。这个小节呢,我们来实现一下同步任务项。Then方法返回结果的实现。同步任务指的是在执行器函数当中直接去通过调resolve reject,或者说是用through的方式去改变状态。然后这个时候呢,我们来对Z方法的返回结果做一个实现。首先我们先回顾一下Z方法返回结果,它的一个规律,或者说它的一个就是特点。首先呢,另方法的返回结果呢,是由它指定的回调函数的执行结果来决定的。就是它的返回结果啊,是由这个回调函数的执行结果来决定。假如说在这个回调函数当中,它在执行时返回了一个非promise类型的数据。
01:03
啊,比如说数字啊,UnDeFined呀,字符串啊等等等等,那result这个结果它就是一个成功的promise。那如果说你返回来要是一个promise,那你返回的就决定了Z方法返回的这个promise,它的一个结果和状态。好,我们可以先来看一看。打开浏览器。刷新你看啊,点开你上边这块呢,是一个返回的unDeFined,所以说伪造的结果应该是成功的,然后我们点开看一下状态为成功,然后结果值为unDeFined,为什么为unDeFi呢?就是因为这块return是一个unde。好了,这咱们先回顾一下返回结果的一个特点。下边呢,我们就开始对这个功能去做一个实现,这个怎么去实现呢?注意我们一点一点来,首先Z方法的返回结果是一个promise对象。
02:01
你看咱们这个,你再看咱们这个刷新页面,咱这是啥onDeFi,为啥是onDeFi呢?因为在这个Z方法当中啊,没有写任何一个return。你看。一个return都没有,所以说它的返回结果呢,这块是一个unDeFined,那好,既然呢,你要求必须是一个promise类型的,那我们就满足一下。是吧,这种要求呢,必须得满足。好,那往前推一下。完成之后,咱们先来先看一看状态啊,看类型。你看此时咱的返回结果呢,也变成了一个promise对象,但是啊,有一个缺陷,啥缺陷呢?就这块儿,它一直是pending。啊,它不会受到这个执行结果的一个影响,那好,现在呢,我们再往前推进来,根据这个回调函数的执行结果来去改变promise对象它的一个状态。
03:02
那现在这个回调函数它是在哪执行的呢?它状态呢,已经变为成功了,所以说它一定会走这儿。哎,它会走这那走这的话,我们如何来获取它的一个执行结果呢?哎,获取回调函数的执行结果。好,在这的话,我们用一个变量接收一下let result。然后呢,这边也叫result,咱把它换一下啊,前面这个叫res,这边这个呢叫result。你看,这样一来,我是不是就可以拿到这个回调函数的执行结果了?那拿到之后呢,下边咱就开始判断了啊判断。如果result,他要是promise。这个。实例也就它是一个promise类型的对象,那好你就走,这如果不是呢,如果不是的话,那就应该是啊结果的对象。
04:00
状态为成功。像当前这个情况,咱就应该把啊,这个res它的对象状态变为成功,那我们怎么样做才能够去改变这个Z方法返回结果对象的状态呢?这个Z啊,返回结果其实说白了就是它。啊,再往前迈一步,就是res,其实就是return new promise,你要想去改变res状态,我们就必须得在这个执行器函数内部去调resolve,或者调reject。啊,那现在的话应该要变为成功,那变为成功的话,我们就直接调谁呀,调resolve就可以了,并且设计设置其成功的结果为这个return的结果。Return结果是谁呀,是他。你看这个return的结果就是result,那咱们直接把result放进来就OK了。好,可以先看看结果啊,点开它右键刷新一下。
05:02
点开你看状态。啊,成功,然后呢,结果值是一个unDeFined没有问题,那比方说我在这儿呢,咱们变换一下,我return一个hello是吧,Promise。返回一个字符串,再来看结果。然后点开状态成功,结果值,Hello promise没有问题,好,这是第一种情况,那么下边如果说他要是一个promise类型的对象呢?如果是promise类型的一个对象。那怎么办呢?那也可以是吧,既然你是个promise,那你一定可以调任方法喽。对不对,你可以调任方法。而且你的状态如果是成功,那你一定会走第一个回调函数,如果你是一个失败的状态,那你一定会走第二个回调函数,好,那如果你result成功了。
06:01
咱说了,如果它的返回结果promise对象是一个成功的,则整体另方法的返回结果也是成功的,所以咱们在这应该调resolve。并且,你成功的结果就是我成功的结果。我先写上啊,Return一个new的promise。拿过来。Resolve,然后reject。比方说我这写一个resolve,然后写一个success。你看啊,我这return的一个结果是一个promise,我是成功,则res就是成功啊,我成功的结果就是他成功的结果,那在代码当中呢,我们这个result代表谁啊,就是这个他return new promise,那我成功肯定会走这。对不对,肯定会走,这那我在这个内部我就要resolve,就是改变这个res,就是返回的这个promise,它的状态为成功。
07:01
那么你成功的结果在哪呢?在V这块呢?所以说我要让res它的这个成功结果也来为这个为。下边这块也是如此。好了,搞定,咱们先来看看效果怎么样啊。正常来说,他成功了。那我res也成功啊,然后呢,他成功结果是success,我成功结果也应该是success。点开看这success没有问题,好,那再比如说我这失败了啊,写一个oh no是吧,Oh no。我失败了,你失败的话,你想想你失败你肯定走这儿啊。对不对,你走这,你走这的话,REJECT1定要这个就失败,这个失败其实就是它是失败的,好看结果右键刷新页面好了,没有问题。啊,没有问题,好,那么在这儿完成之后呢,咱们还有一个点呢,需要再去往前迈进一步,哪一步呢,就比方说我这还有可能是抛出错误呢。
08:05
啊,或者抛出异常。抛出异常来一个through一个,然后咱们写一个feel,举个例子,抛出异常这块他也应该是变成失败,那我们如何如何做能够对抛出异常这个情况也把它。这个对象状态变成一个失败呢?好,还是老样子,我们用谁啊,Try catch。把这个代码呢,咱包起来。Catch。啊,把它包起来。诶,然后呢,我往前推一推。往前推一推。好没有问题,那如果说你在执行的过程当中,你看啊,你这这是那个成,这是那个回调函数,我也看清楚一些,我把这个卡掉。这是那个回调函数,你在这儿执行。你想想。你传给了他?他在这执行,所以你这要抛错,我TRY是可以接到的,Catch可以拿到你抛出的结果,一旦你抛,我就要改变返回promise这个对象,它的状态为失败。
09:12
所以说我这直接写一个reject,并且把你抛出那个结果设置为失败的结果值就可以了。好了,看效果,点开右键刷新页面。状态为失败。然后呢,失败结果值为你抛出的那个值。好了,这样一来我们任方法返回结果的一个啊这样的。这样功能啊,以及状态就已经完成了,咱们这个小节就先到这儿。
我来说两句