// 一、创建实例
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. express 路由匹配和数据获取

    express配置路由只需要通过app.method(url,func)来配置,其中url配置和其中的参数获取方法不同 直接写全路径 路由中允许存在. get请求传入的参数 router.get(&q ...

  2. 什么是云效 Projex,云效Projex企业级高效研发项目管理平台

    云效项目协作Projects是一款企业级高效研发项目管理平台, 提供了快速实践的敏捷研发项目管理机制,提供对需求.迭代.缺陷各个维度的协同管理以及相关的统计报告,让研发团队高效协作.践行敏捷并持续交付 ...

  3. 搭建http文件服务器 - python3使用http.server搭建http文件服务器

    适用场景 只要有python3就可以,windows系统cmd窗口直接敲命令,Linux系统,直接敲命令 step-1 cd cd 到需要搭建服务器的目录 step-2 http.server pyt ...

  4. 关于URL encode和parse

    from urllib import parses = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu& ...

  5. 测试开发【提测平台】分享11-Python实现邮件发送的两种方法实践

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 按照开发安排,本篇本应该是关于提测页面的搜索和显示实现,怕相似内容疲劳,这期改下内容顺序,将邮件服务的相关的提前,在之前的产品需求和原型中 ...

  6. AT2305-[AGC010D]Decrementing【博弈论】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2305 题目大意 \(n\)个数字两个人进行博弈,每个人的操作为 选择一个大于1的数字减一 之后所有数字除以所有 ...

  7. YbtOJ#593-木棍问题【费用流】

    正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/3 题目大意 \(n*m\)的网格上有一些格子有木球,两个相邻木球直接可以有木棍. 两个\(L ...

  8. String(char[] value, boolean share) {

    记录一下今天被蠢到 1. 在观察StringBuffer类的toString方法时,发现了个没见过的方法 return new String(toStringCache, true); @Overri ...

  9. EF Core Sequence contains no elements

    一.在.Net Core中使用Ef的聚合函数报错: 类似函数: 1,使用FirstOrDefault() 来代替 First() 2.使用SingleOrDefault 来代替 Single 3.使用 ...

  10. UVa/数组与字符串习题集

    UVa-272. Description: TEX is a typesetting language developed by Donald Knuth. It takes source text ...