import axios from 'axios'; import Qs from 'qs'; import cookie from './cookie'; import httpErrorHandler from './httpErrorHandler'; const isDev = process.env.NODE_ENV === 'development'; const queue = []; const cancelToken = axios.CancelToken; const token = (config) =>{ return `${config.url}_${config.method}` } const instance = axios.create({ baseURL: '/m', headers: { token: cookie.getItem('fe_t'), post: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'dataType': 'json', } } }); const removeQueue = (config) => { for(let i=0, size = queue.length; i < size; i++){ const task = queue[i]; if(task.token === token(config)) { task.cancel(); queue.splice(i, 1); } } } //添加请求拦截器 instance.interceptors.request.use(config=>{ removeQueue(config); //在一个ajax发送前执行一下取消操作 config.cancelToken = new cancelToken((c)=>{ queue.push({ token: token(config), cancel: c }); }); return config; }, error => { return Promise.reject(error); }); //添加响应拦截器 instance.interceptors.response.use(response=>{ removeQueue(response.config); return response.data }, httpErrorHandler); /** * 封装后的ajax post方法 * * @param {string} url 请求路径 * @param {object} option 请求参数 * @param {object} config 自定义配置 * @returns */ export default (url, data, config = {}) => { return instance.post(url, data, config) }