登录信息失效后多次请求提示合并成一次

本文介绍了如何通过在axios的请求和响应拦截器中使用Map和弱引用实现业务场景中的错误提示优化,确保在一定时间内仅展示一次相同的错误信息,提高用户体验。
摘要由CSDN通过智能技术生成

在通常的业务场景中经常会出现进入页面之后一次性发送好多个请求,如果登录信息失效,那就会出现很多提示
在这里插入图片描述
类似这种多个提示的,看起来不美观,希望改成可以把在短时间内出现相同的错误信息,只提示一次,其他的就不提示了

实现思路

  1. 通常业务中每一个请求的code都是有具体的意思,可以把每一个请求返回的code昨晚一个key存到map里面
  2. 规定一个时间,在这个时间内重复出现的就不提示了
  3. 每次进来的时候查看map里有没有对应的code值
  4. 没有的话就把code作为键存起来,当前的时间戳作为值
  5. 有的话就进行判断有没有超过之前规定的时间,超过了删除map中对应的code值,然后重新调用一下,重新提示一下
import axios from 'axios';
import { Message } from 'element-ui'
 
// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // api的base_url
  timeout: 5000 // 请求超时时间
});
 
// 请求拦截器
service.interceptors.request.use(
  config => {
    // 可以在这里添加请求头等信息
    // if (store.getters.token) {
    //   config.headers['X-Token'] = getToken();
    // }
    return config;
  },
  error => {
    // 请求错误处理
    console.log(error); // for debug
    Promise.reject(error);
  }
);

let weakMap = new Map()

function tips(response){
    let {code,msg} = response
    const dealy = 2000
    // 先查看之前有没有缓存
    if(weakMap.get(code)){
        let globalData = weakMap.get(code)
        let currentData= Date.now();
        // 如果当前的请求返回的时间超过延时时间,把里面的缓存清除,然后重新提示一下
        if(currentData - globalData >= dealy){
            weakMap.delete(code)
            // 重新提示一下
            tips(response)
        }
    }else{
        weakMap.set(code, Date.now())
        Message({
            message: msg,
            type: 'error',
        });
    }
}
 
// 响应拦截器
service.interceptors.response.use(
  response => {
    // 对响应数据做处理,例如只返回data部分
    const {code,msg} = response.data;
    console.log(code)
    tips(response.data)
   
    return response;
  },
  error => {
    console.log('err' + error); // for debug
    // Message({
    //   message: error.message,
    //   type: 'error',
    //   duration: 5 * 1000
    // });
    return Promise.reject(error);
  }
);
 
export default service;

改造完成之后的效果
在这里插入图片描述

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值