00:00
Hello,大家好,这一个小节呢,我们来对Z方法当中的代码呢做一个补充和优化,首先呢,先点开。点开之后呢,点开这两个啊,点开这两个之后呢,你会发现一个问题,咱们这儿呢。就是对于失败情况的一个状态的改变呢,并没有去添加,咱们只对成功时状态呢,做了一个try catch,以及在内部进行结果的获取状态的改变,但是呢,在失败情况下,咱们并没有去做处理。那么这个代码如果是写成这样子的话,它会有什么影响啊?我来给大家演示一下,以左边代码来为例。啊,咱们是同步去修改代码状,同步去修改对象状态的,改完之后呢,他应该执行这个位置。啊,执行完之后呢,它应该是返回一个成功的promise,应该是这样子的啊,我们点开看一看,右键刷新。你看是成功的没有问题,那再比如说我现在呢,你看着啊,我来一个失败。
01:02
来一个error,我如果失败的话,他应该走的是下边这个回调函数。走下边儿这个回道函数呢,它的返回结果也是一个onDeFi,那么res结果应该是一个成功的promise对象才对。但是你来看看咱们现在这个结果。它就是一个pending,为什么是一个pending呢?原因就在于你把这个回调函数交给了on rejected之后。然后呢,他到了失败状态下边去执行,执行完之后并没有根据结果来决定这个返回的promise对象,它的一个状态也就是这个。没有去对它进行设置,所以说呢,咱们这个代码就是有瑕疵的。咱们应该呢,给他补全。That result等于,当然了,Try catch也要加上。啊,也要加上。好,把代码呢往前推一推啊,如果说你要抛了错,抛了错就直接失败,Reject来个一。
02:04
然后呢,如果成功啊,没有抛错,那就走里边啊,下边我们需要对它的一个返回结果类型去做一个判断,如果result instance of。是这样的话呢,你要是promise的话是一种情况,你要不是promise是另外一种情况,那如果你不是promise呢。啊,那你就是应该返回一个成功的啊,就是就是应该把返回的那个promise对象的状态改成成功的。我们写一个resolve,然后并且把你的返回结果作为成功的结果。那如果说你这块要是一个promise对象怎么办呢?啊result.z你既然是promise,你肯定能掉,Z方法V成功的失败啊成功的这个回调,然后R失败的回调。然后你要成功,我也成功。发过来。啊,你要是失败呢,你到失败,你失败我也失败。
03:03
好了,搞定。来咱们看一下这块右键刷新。看一下成功了没有问题,为什么这块是成功呢?就是因为你在这个位置并没有return其他结果。啊,它是一个unde的返回结果,这个时候。啊,我们整体的这个promise对象呢,他这个状态就会变成一个啊成功的了。那么这块做完之后呢,咱们还要再往前迈一步。往哪卖呢?大家注意观察,你看啊。这个代码写了第一遍,这个代码写了第二遍。再来看下边。下边这个位置也是一样,这代码长的,除了那个回调它不太一样之外,其他代码都是一样子的。啊,如果你看的不清楚啊,我给你再这样子给你看一下,把它呢点开。然后给你贴个图啊。诶。好了,贴过了这个。哎,这是一个是吧,然后把这个咱遮起来。
04:01
你看再点开这个你再瞅。这代码都是一模一样的,就除了那个回调这块不一样。你看。Try catch,然后里边。做事情,当然这个我忘展开了啊,代码都是一样的,下边那两个也是长一样子,那对于这种这种情况咱们怎么办呢?咱们就要封装啊,不能去写这种重复性代码,因为后期维护起来不方便。所以说呢,我们这儿封装函数。来一个call back。然后呢,把这个代码呢拿进来。我从这直接剪切一份,把它放进来。放进来之后,咱们说了这块内容是不一样的。啊,成功它执行unresolved,失败呢,它执行unre rejected,所以说这块内容不能写死,应该作为一个参数把它传进来。好了搞定,那么搞定之后呢,就下边代码,咱就开始调这个call back就可以了,里边传。Unresolved,因为这个时候是成功。
05:01
啊,咱们把这个参数传递进去,然后它在执行时就是执行的成功的回调,并且处理这个结果。好,那下边呢,这个地方代码。也是一样,把它咔掉,然后再往里边传,On rejected。搞定。再来。下边这块成功的回调,咱也是这个啊。啊,等会啊,咱们应该是call back。对,把它拿过来。然后里边是unresolved。然后下边这一块把它卡掉,应该是call back on rejected。搞定。啊,这样一来的话呢,咱们就把代码呢,进行一个封装。啊,不用去写过多的重复性代码了,以后你要想改的话,你直接改call back就可以了。好了,咱们测试一下,看看好使不好使,首先呢,咱们先来测一下成功它能不能正常输出,以及对应的返回结果正确不正确。右键刷新。
06:01
好,这个是19行onDeFi。19行unDeFined。耶,这块的话出了一点点小问题。呃,Resolve为成功,好,别急啊,我们点开它。啊,点开它之后呢,这块。处理的结果出了一些问题。大家看这。Type,然后this promise result,这是来问题了,啥问题啊?This有问题。这个this呢,现在是在函数内部它直接调用的,所以说this呢是指向window的,我们需要把this呢换成一个self。啊,所以说啊,给写完代码之后一定要测试好,不测试的话容易出问题。刷新你看OK,没有问题,再看他返回的结果这块也没有问题啊,是一个成功的状态,再来测试一下这个失败的。然后点开右键刷新好走这个回调,并且状态这块也是一个成功的,没有问题啊,因为这个回调的话,它返回是一个unDeFined,所以res res状态也是一个成功。
07:05
好,顺便再测试一下谁呢异步的。Set time out。那咱们来100。把这个只要测试没没问题了,那就肯定是OK了。右键刷新。好了,你看啊,这已经出来,然后看状态,状态成功没有问题,再来看它。把下边这个注掉。右键打开。好,显示这块输出没有问题啊,然后再看状态field没有问题。好了,那到这儿的话,咱们Z方法这块的一个封装优化就已经完成了,这个小节咱们先到这儿。
我来说两句