ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

axios面试常考

2020-12-07 22:01:22  阅读:402  来源: 互联网

标签:拦截器 Axios get 常考 request 面试 axios prototype


1.为什么 axios 既可以当函数调用,也可以当对象使用,比如axios({}) axios.get

axios() 当函数调用:

  1. 因为构造函数中,返回的实例就是一个 wrap 函数,在 wrap 函数中返回的是 Axios.prototype.request 函数
  2. axios() = instance() = wrap() = Axios.prototype.request.call(context)

axios.get 当对象调用:

  1. 在构造函数中使用 extend 方法,将 Axios.prototype 上的属性方法拷贝 instance
  2. 在 Axios.prototype[method] 中,返回的是 this.request 这个方法
  3. 所以 axios.get() = instace.get = Axios.prototype.get() = Axios.prototype.request()

注意:无论哪种方法调用最后都是执行 Axios.prototype.request() 这个方法

2.简述 axios 调用流程

  1. 实际是调用的 Axios.prototype.request 方法
  2. 最终返回的是 promise 链式调用,实际请求是在 dispatchRequest 中派发的

3.有用过拦截器吗?原理是怎样的?

  1. axios.interceptors.request.use 添加请求成功和失败拦截器函数
  2. axios.interceptors.response.use 添加响应成功和失败拦截器函数
  3. 在 Axios.prototype.request 维护一个数组
  4. 然后通过 Interceptors.protype.forEach 将拦截器存入 dispatchRequest 的两端,然后都放入该数组
  5. 然后通过循环该数组,组成 promise 链
  6. 从而做到请求前拦截和响应后拦截

注意:dispatchRequest 用于处理适配器adapter发送请求

5.为什么支持浏览器中发送请求也支持 node 发送请求?

  1. 使用的是适配器的模式
  2. 在 defaults.js 文件中去判断环境,然后根据环境使用对应的适配器
  3. 在 axios.defaults.adapter 中可以找到

标签:拦截器,Axios,get,常考,request,面试,axios,prototype
来源: https://blog.csdn.net/qq_44818085/article/details/110845864

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有