Axios 源码解读 —— 网络请求篇

本文详细解读 Axios 的 dispatchRequest 方法,包括取消请求、处理请求 data、合并请求 headers 以及发起真实请求的流程。同时,深入剖析客户端 adapter xhrAdapter,涉及请求前的准备、设置鉴权信息、拼接请求 URL、响应回调函数等关键步骤。通过对源码的分析,展示了 Axios 请求流程的清晰脉络。
摘要由CSDN通过智能技术生成

上一章我们介绍了 Axios 源码解读 —— request 篇,这一章我们来介绍 Axios 实际发起网络请求的部分吧,也就是 dispatchRequest 方法。

dispatchRequest

这个方法定义也比较简单(如下图)

image

第 29 行 —— 取消请求

我们来逐行解析每一行代码所做的事情吧,首先是第 29 行的取消请求。(如下)

throwIfCancellationRequested(config);

这个动作不仅仅在发起正式请求前做了一次,而且在请求成功和请求失败时都做了一次。

只要是被 cancel 的请求,都是不会进入到成功或失败回调处理中的。(如下图)

image

throwIfCancellationRequested 函数所做的事情,就是检测该请求是否被取消,如果被取消则抛出一个错误,并阻止代码继续向下执行。(如下)

function throwIfCancellationRequested(config) {
   
  if (config.cancelToken) {
   
    // 检测请求是否被取消,然后决定是否抛出错误
    config.cancelToken.throwIfRequested();
  }

  if (config.signal && config.signal.aborted) {
   
    // 抛出错误
    throw new Cancel('canceled');
  }
}

当然,整套 CancelToken 的实现还是有一些复杂的(复杂在回调处理),如果有人感兴趣的话,可以单独讲讲这一部分的处理,这里就先不做展开了。

第 35 ~ 40 行 —— 处理请求 data

config.data = transformData.call(
  config,
  config.data,
  config.headers,
  config.transformRequest
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值