零散专题20 Axios
Axios学习笔记以及进行超时重试。
在学习Vue的时候,接触到了Axios这个库,查了一些资料,发现这个库还很吊,Vue更新到2.0之后,作者就宣告不再对vue-resource
更新,而是推荐使用Axios
简介
Axios 是一个基于Promise的HTTP库,可以用在浏览器和Node中。
使用Npm安装
1 | $ npm install axios -S |
直接引入:
1 | <script src="https://unpkg.com/axios/dist/axios.min.js"></script> |
API
GET
请求
1 | // 为给定 ID 的 user 创建请求 |
POST
请求
1 | axios.post('/user', { |
执行多个并发请求
1 | function getUserAccount() { |
config
配置
config是对一些基本信息的配置,比如请求头,baseURL
只有url
选项是必须的,如果method
选项未定义,那么它默认是以GET
的方式发出请求
1 | { |
请求返回的内容
1 | { |
可以这样来获取响应信息:
1 | axios.get('/user/12345') |
其他API的介绍可以看这里。
利用拦截器进行超时重试
响应拦截器可以接受两个参数,第一个参数时响应成功的拦截函数,第二个参数时响应失败的拦截函数。当我们在创建axios
实例的时候,如果配置了timeout
选项,当超过这个时间接口未响应,axios就会终止请求,并且返回一个err
对象。
这个err
对象中不仅包括了错误信息,还包括了请求的config
对象,可以从axios源码的xhr.js
中发现:
1 | // Handle timeout |
可以通过err.message
来判断是否是超时错误,而且通过config
对象,我们可以再次发起请求。
首先在创建axios
实例的时候添加了除了timeout
之外的三个自定义属性,用来限制是否重试、重试的最大次数和重试的间隔:
1 | const axiosInstance = axios.create({ |
这些都是可配置的,因为它们都会被axios合并入config
对象中
然后在响应拦截器中进行重试处理:
1 | axiosInstance.interceptors.response.use(function (response) { |