You need to enable JavaScript to run this app. 如何使用lodash的_.debounce防抖axios拦截器解决加载动画频闪问题
优惠活动
大模型
产品
解决方案
定价
更多

如何使用lodash的_.debounce防抖axios拦截器解决加载动画频闪问题

解决方案

核心逻辑是:立即触发「网络繁忙」状态的设置,仅对「网络空闲」状态的切换做防抖延迟,避免短时间内多个请求往返时状态频繁来回切换。


实现步骤

  1. 引入lodash的debounce方法,创建防抖的空闲状态设置函数,延迟时长可根据业务场景调整(推荐200~500ms)
  2. 请求拦截器中每次发起请求时,先清空待执行的空闲状态设置任务,再立即将状态设为繁忙
  3. 响应/错误拦截器中统一调用防抖函数触发空闲状态设置

修改后代码

import debounce from 'lodash/debounce'
const instance = axios.create({
  baseURL: environment.CUSTOM_BASE_URL,
});

// 创建防抖的空闲状态设置函数,延迟300ms执行
const debouncedSetNetworkIdle = debounce(() => {
  store.commit("setNetworkBusyStatus", false);
}, 300)

instance.interceptors.request.use((config) => {
  // 发起新请求时,先取消之前待执行的空闲状态切换任务
  debouncedSetNetworkIdle.cancel()
  store.commit("setNetworkBusyStatus", true);
  return config;
});

instance.interceptors.response.use(
  (response) => {
    // 调用防抖函数延迟设置空闲状态
    debouncedSetNetworkIdle()
    return response;
  },
  (error) => {
    // 请求报错同样要触发空闲状态设置
    debouncedSetNetworkIdle()
    if ([401, 403].includes(error.response.status)) {
      store.commit("delUserData");
      router.push("/login");
    }
    return Promise.reject(error);
  },
);

可调优项

  • 可根据业务需求调整防抖延迟时长:时长过短仍可能出现频闪,过长会导致加载动画消失太慢影响感知
  • 若存在不需要计入网络繁忙状态的请求(如后台静默轮询),可在请求config中新增自定义标识,请求拦截器中判断到该标识时跳过状态修改逻辑即可

内容的提问来源于stack exchange,提问作者Kirk Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 13:06:04