当前位置: 首页 > wzjs >正文

德州网站建设推广企业网站推广有哪些

德州网站建设推广,企业网站推广有哪些,给别人做的网站涉及到诈骗,wordpress 焦点图大小处理网络请求时,我们经常会遇到需要中途取消请求的情况,比如用户在两个tab之间反复横跳的场景,如果每个接口都从头请求到结束,那必然会造成很大的服务压力。 AbortController是一个Web API,它提供了一个信号对象&…

处理网络请求时,我们经常会遇到需要中途取消请求的情况,比如用户在两个tab之间反复横跳的场景,如果每个接口都从头请求到结束,那必然会造成很大的服务压力。

AbortController是一个Web API,它提供了一个信号对象(AbortSignal),该对象可以用来取消与Fetch API相关的操作。当我们创建AbortController实例时,会自动生成一个与之关联的AbortSignal对象。我们可以将这个AbortSignal对象作为参数传递给fetch函数,从而实现对网络请求的取消控制。

import axios from 'axios'
import QS from 'qs'//引入qs模块,用来序列化post类型的数据// 创建map存储未返回response的接口请求
const pendingRequests = new Map();const generateRequestKey = (config) => {// 处理请求数据,确保请求和响应时一致,response返回的config中可能存在序列化的data,需要转换成json格式,否则生成的key不一致const normalizeData = (data) => {if (typeof data === 'string') {try {return JSON.parse(data);} catch {return data;}}return data;};return [config.method,config.url,JSON.stringify(normalizeData(config.params) || {}),JSON.stringify(normalizeData(config.data) || {})].join('|');};axios.defaults.baseURL = '/';
axios.defaults.timeout = 10000;
axios.defaults.headers.post['Content-Type'] = 'application/json';
// 如果需要跨域,可以设置withCredentials为true
axios.defaults.withCredentials = true; // 允许跨域请求时发送cookies// 创建axios实例
const service = axios.create({baseURL: '/api', // api的base_urltimeout: 10000,// 请求超时时间headers: {'Access-Control-Allow-Origin': '*','strict-origin-when-cross-origin': '*','Cache-Control': 'no-cache','Content-Type': 'application/x-www-form-urlencoded','userRole': 'WEB','Accept-Language': i18n.locale || localStorage.getItem('Accept-Language')}
});// 请求拦截器
service.interceptors.request.use(config => {config.headers['nh-token'] = localStorage.getItem('NH_TOKEN') || ""const token = localStorage.getItem('newToken') || ""if (token) config.headers['Authorization'] = 'Bearer ' + token // 新服务添加token// 生成请求key,用于取消重复的相同请求const requestKey = generateRequestKey(config, 'service.interceptors.request');// 如果存在相同请求,取消前一个if (pendingRequests.has(requestKey)) {const abortController = pendingRequests.get(requestKey);abortController.abort();}// 为当前请求创建新的控制器const controller = new AbortController();config.signal = controller.signal;pendingRequests.set(requestKey, controller);return config;
},error => {return Promise.error(error);})
// 响应拦截器
service.interceptors.response.use(response => {const requestKey = generateRequestKey(response.config, 'service.interceptors.response');pendingRequests.delete(requestKey);// console.log('Response=>', response.request.responseURL, response  );if (response.status === 200) {//result  0-正常  1-异常  10000-未登录 4000-系统异常if (response.data.result == 10000) {// 登录失败,跳转到首页,重新登录router.push({ path: '/login' })return Promise.resolve(response.data)} else {return Promise.resolve(response.data)}} else {return Promise.reject(response);}},error => {if (error.name === 'AbortError') {console.log('请求已被取消:', error.message);}// 取消请求时,不执行这里的代码const requestKey = generateRequestKey(error.config || {});pendingRequests.delete(requestKey);if (error.status) {return Promise.reject(error.response);}})
export default service

在接口封装层按照如上进行,可以满足接口重复请求时,取消重复的操作。需要注意一点,config.data,从request层获取的是Object,但是从response层获取的是一个JSON化的String。所以通过normalizeData方法,进行数据解析,防止map找不到。

http://www.dtcms.com/wzjs/44271.html

相关文章:

  • pc门户网站是什么意思如何进行品牌宣传与推广
  • 做网站图片不够大怎么注册网站平台
  • 做网站设计需要什么技术安徽百度推广怎么做
  • 国家顶级域名网站是seo管理
  • 陕西做网站的公司电话不受限制的浏览器
  • wordpress评论表单湖北seo
  • 如何做网站跳转页面论坛外链代发
  • 北京网站建设公司华网天下优惠湖北网络推广有限公司
  • 苏州做网站的网络公司诈骗常州网站建设书生商友
  • 公司网站建设基本流程图推广平台哪个效果最好
  • ps做网站心得脚本外链生成工具
  • 家具定制网站公司网站设计与制作
  • 跟做网站相关的法律seo优化诊断
  • 建设通网站是免费的吗十堰seo
  • 济南企业建站品牌西安霸屏推广
  • 做网站得花多钱怎么开网站平台挣钱
  • 网站建设岗位所需技能seo关键词seo排名公司
  • 做网站用哪个操作系统稳定百度推广登录
  • 遵义做企业网站南宁seo外包服务商
  • 黄石网站建设教程黄金网站app视频播放画质选择
  • 免费数据查询网站宁波seo排名优化价格
  • 网站手机客户端在线制作seo数据是什么
  • 江门网站排名优化系统优化软件
  • 网站建设技术合伙人的技术股份免费数据统计网站
  • 上海网站建设 报价西安高端网站建设
  • 购物网站建设比较好的app推广团队
  • 聊城网站建设代理商西安seo专员
  • 重庆建设网站的公司简介检测网站是否安全
  • 舟山集团网站建设郑州百度seo
  • 阿里云服务器12元一年seo网络营销的技术