// 一、创建实例
const request = axios.create({
baseURL: "http://kg.zhaodashen.cn/v2",
headers: {
// token:
// localStorage.getItem("token") || "adf7cbdcdc62b07d94f86339e5687ca51",
"content-type": "application/x-www-form-urlencoded",
},
timeout: 5000,
});

// 二、拦截器
// 语法:axios/request.interceptors.request/response.use(callback, callback)
// 作用:拦截用户每次的请求和相应数据 来过滤
// 请求:点击按钮 -> 触发methods -> 发送异步请求 -> 拦截( Loading、token、CancelToken等 -> 发送
// 响应:后端返回数据 -> 拦截(关闭Loading、 接口权限、TOKEN过期、res.data.data过滤 -> 异步请求then -> 结束
// 强调:异步请求then拿到什么数据 取决于相应拦截器返回的结果
let loadingInstance = null;
let ajax = {};
request.interceptors.request.use(
(config) => {
// console.log(config);

// 全局遮罩Loading
// loadingInstance = ELEMENT.Loading.service();

// token
config.headers["token"] =
localStorage.getItem("token") || "adf7cbdcdc62b07d94f86339e5687ca51";

//取消重复请求
if (ajax[config.url]) {
ajax[config.url].cancel("用户取消了请求");
// delete ajax[config.url]
}
ajax[config.url] = axios.CancelToken.source();
config.cancelToken = ajax[config.url].token;

return config;
},
(err) => {
return Promise.reject(err);
}
);

request.interceptors.response.use(
(response) => {
// 关闭全局Loading
loadingInstance.close();

console.log(response);

return response.data;
},
(error) => {
// 失败响应
let errorObj = JSON.parse(JSON.stringify(error));

// 关闭Loading
if (loadingInstance) loadingInstance.close();
// 判断失败原因
if (errorObj.message.includes("timeout")) {
ELEMENT.Message.error("网络繁忙,请刷新后重试...");
} else if (errorObj.message.includes("404")) {
ELEMENT.Message.error("大兄弟,接口地址写错了 404...");
} else if (errorObj.message.includes("取消")) {
console.log("重复点击取消...", errorObj);
} else {
// 邮件报警

}
return Promise.reject(error);
}
);

//

axios & fetch 异步请求的更多相关文章

  1. axios浏览器异步请求方法封装 XMLHttpRequest

    axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...

  2. js fetch异步请求使用详解

    目录 认识异步 fetch(url) response.json() 结合async和await 异常处理 post请求 认识异步 首先我们得明白请求是一个异步的过程. 因为请求需要时间向服务器发送请 ...

  3. vue中使用axios(异步请求)和mock.js 模拟虚假数据

    一.使用axios 1.安装 npm install --save axios 2.引用 import Axios from 'axios' Vue.prototype.Axios = Axios 二 ...

  4. vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别

    先说一下对比吧 Jquery ajax, Axios, Fetch区别之我见 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1 ...

  5. 异步请求xhr、ajax、axios与fetch的区别比较

    目录 1. XMLHttpRequest对象 2. jQuery ajax 3. axios 4. fetch 参考 why: 为什么会出现不同的方法呢? what: 这些都是异步请求数据的方法.在不 ...

  6. 异步请求与中断 ( XHR,Axios,Fetch对比 )

    随着AJAX技术的诞生,前端正式进入了局部刷新和前后端分离的新时代,最初的服务请求技术是XHR,随着技术发展和ES6的诞生,jquery ajax,axios,fetch 等技术的产生让前端的异步请求 ...

  7. vue 中使用 async/await 将 axios 异步请求同步化处理

    1. axios 常规用法: export default { name: 'Historys', data() { return { totalData: 0, tableData: [] } }, ...

  8. axios - 基于 Promise 的 HTTP 异步请求库

    axios 是基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用.Vue 更新到2.0之后,作者就宣告不再对 vue-resource 模块更新,而是推荐使用 a ...

  9. js fetch处理异步请求

    以往一直认为异步请求只能使用原生js的XMLHttpRequest或jQuery的$.ajax().$.post()等框架封装的异步请求方法 原来js还提供fetch来替代XMLHttpRequest ...

随机推荐

  1. photoshop 网页png图标保存后有锯齿解决办法

    有些人用png图片时为了要兼容在IE6下对png32或png24不透明的时候,他们都是用js处理的. png分为三种格式png8,png24,png32这三种格式,数值越高图片的精度质量就越好,相对的 ...

  2. SonarQube安装Java扫描插件

    近段时间在研究sonarqube,成功扫描python项目,但是扫描java项目失败. 在网上查询到,扫描java项目需要安装Java插件. 如下图: 而我在最新的sonarqube中搜索java,没 ...

  3. python的列表和java的数组有何异同

    今天面试被问到,自己学习一下. python的列表是可变长的,定义时不需要指定长度:pyhton是弱对象类型,python的列表存储的数据类型可以不相同:python的列表更加灵活,如可以通过''命令 ...

  4. find_elements与find_element的区别

    find_element不能使用len,find_elements可以使用len获取元素数量,判断页面有无某个元素,这个方法可以用来断言. 如添加用户后,判断是否添加成功. 删除用户后,判断是否删除成 ...

  5. js 模板方法模式

    * 分离出共同点 function Beverage() {} Beverage.prototype.boilWater = function() { console.log("把水煮沸&q ...

  6. vm中安装win2012并安装hyper-V不支持嵌套

    在虚拟机中安装win2012,并安装hyper-v提示: 无法安装hyper-v:虚拟机监控程序已经在运行 找到虚拟机目录下,用文本编辑器打开该系统的虚拟机配置文件(.vmx后缀),在配置文件末尾增加 ...

  7. JavaScript 原生控制元素添加删除

    参考: https://blog.csdn.net/leijie0322/article/details/80664554 https://www.cnblogs.com/jpfss/p/910620 ...

  8. CF1446F-Line Distance【计算几何,树状数组,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1446F 题目大意 给出\(n\)个点,求所有点对构成的直线中与原点距离第\(k\)小的距离 \(2\leq n ...

  9. CF453C-Little Pony and Summer Sun Celebration【构造】

    正题 题目链接:https://www.luogu.com.cn/problem/CF453C 题目大意 \(n\)个点\(m\)条边的一张无向图,每个节点有一个\(w_i\)表示该点需要经过奇数/偶 ...

  10. Spring Security 学习+实践

    Spring Security是Spring为解决应用安全所提供的一个全面的安全性解决方案.基于Spring AOP和Servlet过滤器,启动时在Spring上下文中注入了一组安全应用的Bean,并 ...