00:00
Hello,大家好,那这条节我们来对Excel源码分析做一个总结。先来看看第一个问题。大家思考一下,这个小写的xcel与大写这个A开头的xcel,它们有什么关系?很多同学可能会想说,诶,我知道这个xce是通过它实例化出来的。其实呢,它并不是直接通过拗的方式实例化得来的。那么怎么得来的呢?大家应该还记得啊,我们在这个文件当中再去看一看access的一个由来。它是通过create instance的方法创建而来的。先造一个实例。又造一个函数。把实例原型上的方法往上面去放,往函数上面去放,然后又把实例这个对象上面的属性加到了函数对象身上。
01:03
最终再返回。形成的XL。所以说在语法上来说,Excel不是这个大写xce的实例。但是从功能上来说。Exce是它的实力,为什么这么讲?是因为xce拥有它实例对象上面的方法。你想它实例,它的对象上面有什么方法,Get post这些方法Excel都有,怎么来的呢?都是通过扩展的方式,把原型的这些方法都加到了函数对象身上。好,这是这个。下边再看一下Excel是通过这个request函数绑定返回的一个函数。啊,没有错,大家看这个代码是通过B创建而来的。还有就是Excel,它把原型上面的方法都拿了过来,所以它可以呢去调get,调post,调post delete等等方法。
02:09
那么再看第二个问题,Instance与Excel的区别。这个问题呢,我们之前没有介绍过,也没有谈及过。Instance呢?其实就是通过create方法创建出来的实例。大家可以来看一看,之前我们使用的时候。啊,创建实例对象。excel.create excel.create我们说过这玩意儿啊,可以当它的这个使用方式与Excel的使用方式是一模一样的。既可以当函数时,又可以当对象式。那么这个实例对象。它与Excel之间的区别在哪呢?我们来看看圆码。找到那个create方法,看这。Their create。那你会发现一点。
03:00
它内部在创建这个对象的时候用的也是create instance。那同学可能会想,诶,那不就一模一样吗?哎,别急,不一样。如果说通过create instance啊创建的这个对象。它呢,只能说既可以当函数时,又可以当对象句式。但是在这个创建出来的新对象当中。是没有。后续为Excel添加的这些属性的。哪些属性呢,你比如说这个他没有。这个他有没有也没有。这个呢,这个这个这个他都没有。因为通过这种方式创建,他只能拿到这个实例对象上面的属性和方法。而在后续。单独为Excel添加这些属性。通过它造出来是没有的。
04:00
就通过create instance啊,创建出来的对象是不具备的。这就是他们两个一个区别。相同点在于,既可以当函数叙式。又可以来当对象句式,而且都有这些默认属性,Default和intercept,但是呢,不太一样啊,不太一样就是instance不具备Excel后续所添加的一些。啊,这些成员。Create can token,他都没有。好,这是这个第二个问题,下边的话,第三个是Excel的整体运行流程。啊,然后他们其实都是由create instance造成的对象。啊,然后呢,开始去进行这个请求的发送,发送都是由request发起的。Request内部呢,设置请求拦截器。然后去做一个执行,然后呢,Dispatch,如果请求拦截器没有问题,那就由dispatch request去发送请求结果回来之后。
05:04
诶,别急啊,这里还有adapt啊,就是。根据不同的适配器去执行啊,不过咱们在前端用的话就是用阿贾克斯了。结果回来之后,再由响应拦截器对其结果做一个处理啊,最后使用户指定的成功或失败的回调去执行。所以跟咱们之前所讲的是一样的,它先是request request调dispatch request,然后再去调啊这个对应的适配器完成请求结果返回,结果返回最终。然后用。就是由我们的这个Excel执行结果,把这个最终结果拿到啊,去用Z方法对成功和失败结果做处理。下边的话就是关于拦截器的啊,拦截器咱们说过其实就是一堆函数。不过这些函数哦,是通过这种组合的方式,一定的结构在promise链条当中去执行,形成这样一个效果。
06:08
啊,看一下请求拦截器在发送请求之前执行的回调函数啊,可以对请求之前的一些准备做一些这样的一些事情,比如说检测参数啊,或者说修改参数啊,都可以完成。啊,成功的回调,失败的回调,成功的回调呢,里边传递参数是conig,什么意思呢?就在请求拦截器当中,他们传递的是这个config配置对象。在发送之前,你都可以对这个对象进行任意的修改。然后在发送请求时,就可以用新的配置去代替旧的配置完成请求。而响应人气呢,是结果回来之后执行的回调函数,他们在传递数据时都是传递的response就是那个响应的结果对象。
07:02
好,然后呢,下边还有是关于请求和响应数据转换器这块。转换器这块,其实它的作用完全可以由拦截器来帮我们完成。来这个请求,来这个请求转换器,它可以对数据来做一些处理。啊,对请求数据做一些处理,而响应连接器呢,它可以对响应的结果做一些预处理。啊,所以这个事情完全可以交由拦截器去做。是这么一个特点。然后呢,下边是关于response整体结构,它的返回结果,包括这样一些属性,在这个咱们都已经模拟实现过了啊,然后A的话,整体结构包括这样几个属性。啊,这是失败的一个情况。然后最后就关于如何取消未完成的请求,这个咱们已经说过了,就cancel token内部维护一个promise的。这样的对象啊,其默认状态为pending,然后将改变该对象状态的那个变量。
08:05
它的执行作为一个函数暴露出去。暴露出去之后呢,然后我们再把这个接收到这个函数赋值给一个全局的,或者复制到一个位置,在需要的时候去执行它。整个的结果。整个这个promise状态就会改变,而且他状态一改变,后续就会引发出一系列的这个事情,最终让请求取消。这就是他取消请求的一个原理。好了,那关于Excel源码分析的这个内容,我们就先说这么多。
我来说两句