温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
哈喽,大家好,这个小节呢,我们来实现另外一个功能,那就是通过路抛出异常来改变promise队形的状态,在之前介绍关键问题的时候呢,咱们说过啊,改变promise这样状态呢,有三种方式,第一个就是叫resolve,第二个呢叫reject,第三个就是抛出异常,也就是抛出异常也可以改变promise间的状态。而且在这个语法上的话,它是会把对象状态变为一个失败的,我们可以先看看现在代码情况是怎样的,我呢写一个through error,咱们先看当前是怎样一回事。你看这个时候它的结果是直接十五行就报错了,十五行报错之后呢,下边代码连执行都没执行。所以这个结果一定是不对的。正常来说,这个P应该是一个失败的promise对象才对。好,下边呢,咱们开始去分析一下怎么样做才能通过路抛出异常来去改变的对象状态。
01:06
那么既然这里有through,咱们第一时间应该想到的就是try catch,因为只有try catch才能够去处理这个through抛出的这个异常。好了,那踹开咱们想到之后呢?下边问题就是拆开是我往哪加?啊,Try catch,我往哪加,咱们就要分析这个函数它到底在哪执行。这个函数应该是在promise内部,这个执行器函数在这个位置执行的。好,既然你是在这执行,那行,我来写一个catch,然后把它往前推一推,这样一来,我的try catch就能够把你抛出的这个值给接到。那么记了之后,咱们下一步要做什么事情呢?我们要修改promise对象的状态为失败,那我如何做才能够将这个promise这样状态设置为失败呢?简单,只需要调reject就可以了。
02:12
啊,而且你抛出的这个结果啊,这个数据就是promise对象失败的结果值。所以说我们在这儿呢,需要把这个值给它。而这个值它最终就是在中,在中间try catch的时候,它会传递给谁呢?它会传递给这个E。所以说咱们在这设置结果值的时候,只需要把E交给reject就可以了。OK,搞定,咱们来看看结果怎么样,刷新一面,你看状态为失败结果值为你抛出的那个值,Error。咱们呢,为了做做对比是吧,咱们把内置的这个啊,咱们打开看一看效果,把咱们这个注掉,右键刷新。
03:03
看这下边这个抛错大家不要管它啊,因为这个错误是因为失败的promise没有指定失败回调所导致的,看状态失败,然后呢,这失败结果值为error啊没有问题,有同学说呢,诶你看这个位置它有两个中括号,这咋回事呢?这个是它表明这个这个双,这个双两个这个中号呢,它表明这个属性,使这个对象内置的啊内部的一个属性,这些属性咱没有办法通过GS代码直接去对它进行操作。啊,这点的话大家了解一下好了,那这个代码这个功能我们就已经实现完毕了啊,把它先保存一下。
我来说两句