axios 源码分析的总结

Bertha 。 2022-08-31 12:21 180阅读 0赞

一、axios 源码分析的总结

  1. axiosAxios 的关系,如下所示:

    • 从语法上来说: axios 不是 Axios 的实例
    • 从功能上来说: axiosAxios 的实例
    • axiosAxios.prototype.request 函数 bind() 返回的函数
    • axios 作为对象有 Axios 原型对象上的所有方法, 有 Axios 对象上所有属性
  2. instanceaxios 的相同点,如下所示:

    • 都是一个能发任意请求的函数: request(config)
    • 都有发特定请求的各种方法: get()/post()/put()/delete()
    • 都有默认配置和拦截器的属性: defaults/interceptors
  3. instanceaxios 的不同点,如下所示:

    • 默认配置很可能不一样
    • instance没有 axios 后面添加的一些方法: create()/CancelToken()/all()
  4. axios 运行的整体流程,如下所示:

    • 整体流程:
      request(config) ==> dispatchRequest(config) ==> xhrAdapter(config)
    • request(config):
      将请求拦截器 / dispatchRequest() / 响应拦截器 通过 promise 链串连起来, 返回 promise
    • dispatchRequest(config):
      转换请求数据 ===> 调用 xhrAdapter() 发请求 ===> 请求返回后转换响应数据. 返回 promise
    • xhrAdapter(config):
      创建 XHR 对象, 根据 config 进行相应设置, 发送特定请求, 并接收响应数据, 返回 promise
  5. axios 的请求拦截器是什么,如下所示:

    • 在真正发送请求前执行的回调函数
    • 可以对请求进行检查或配置进行特定处理
    • 成功的回调函数,传递的默认是 config(也必须是)
    • 失败的回调函数, 传递的默认是 error
  6. axios 的响应拦截器是什么,如下所示:

    • 在请求得到响应后执行的回调函数
    • 可以对响应数据进行特定处理
    • 成功的回调函数, 传递的默认是 response
    • 失败的回调函数, 传递的默认是 error
  7. axios 的请求/响应数据转换器是什么,如下所示:

    • 请求转换器,对请求头和请求体数据进行特定处理的函数,代码如下:

    if (utils.isObject(data)) {
    setContentTypeIfUnset(headers, ‘application/json;charset=utf-8’);
    return JSON.stringify(data);
    }

    • 响应转换器,将响应体 json 字符串解析为 js 对象或数组的函数,代码如下:

    response.data = JSON.parse(response.data)

  8. response 的整体结构,代码如下:

    {

    1. data,
    2. status,
    3. statusText,
    4. headers,
    5. config,
    6. request

    }

  9. error 的整体结构,如下所示:

    {
    message,
    response,
    request,
    }

  10. 如何取消未完成的请求,如下所示:

    • 当配置了 cancelToken 对象时, 保存 cancel 函数,如下:

      • 创建一个用于将来中断请求的 cancelPromise
      • 并定义了一个用于取消请求的 cancel 函数
      • cancel 函数传递出来
    • 调用 cancel() 取消请求,如下:

      • 执行 cancel 函数, 传入错误信息 message
      • 内部会让 cancelPromise 变为成功, 且成功的值为一个 Cancel 对象
      • cancelPromise 的成功回调中中断请求, 并让发请求的 proimse 失败, 失败的 reasonCancel 对象

发表评论

表情:
评论列表 (有 0 条评论,180人围观)

还没有评论,来说两句吧...

相关阅读

    相关 tomcat分析总结

    [1. tomcat类加载机制,为什么要违背双亲委托机制(线程上下文类加载器)][1. tomcat]     线程上下文类加载器是指调用方法当前类队员的类加载器。para