You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Axios全局/拦截器中实现每个请求后单独发送通知请求

当然可以!用Axios响应拦截器就能完美实现

完全不需要axios.all,Axios的响应拦截器就是专门用来处理这类“每个请求完成后执行统一逻辑”的场景,而且能轻松避免循环调用的问题。

核心思路

响应拦截器会在每个请求成功完成或失败后自动触发,我们只需要在拦截器里判断当前请求不是api/getNotification本身(防止无限循环),然后发起通知请求即可。

具体实现代码

1. 先创建Axios实例(或直接用全局Axios)

import axios from 'axios';

// 推荐创建独立的Axios实例,便于统一管理配置
const apiClient = axios.create({
  baseURL: '/api' // 假设你的接口前缀是/api
});

2. 添加响应拦截器

// 成功响应的拦截逻辑
apiClient.interceptors.response.use(
  (originalResponse) => {
    // 关键:排除getNotification请求,避免无限循环
    const currentRequestUrl = originalResponse.config.url;
    if (currentRequestUrl !== '/getNotification') {
      // 发起通知请求,这里的逻辑完全独立于原请求
      apiClient.get('/getNotification')
        .then(notificationRes => {
          // 这里可以处理通知数据,比如更新页面通知角标、弹出提示等
          console.log('收到最新通知:', notificationRes.data);
        })
        .catch(err => {
          console.error('获取通知失败:', err);
        });
    }
    // 一定要返回原请求的响应,不影响原请求的后续处理
    return originalResponse;
  },
  (error) => {
    // (可选)如果希望请求失败时也获取通知,添加下面的逻辑
    const failedRequestUrl = error.config?.url;
    if (failedRequestUrl !== '/getNotification') {
      apiClient.get('/getNotification')
        .then(notificationRes => {
          console.log('请求失败后获取的通知:', notificationRes.data);
        })
        .catch(err => {
          console.error('获取通知失败:', err);
        });
    }
    // 继续抛出错误,不影响原请求的错误处理流程
    return Promise.reject(error);
  }
);

关键细节说明

  • 避免无限循环:必须判断当前请求的URL不是getNotification,否则每次获取通知的请求完成后,拦截器又会触发,陷入死循环。
  • 独立处理通知请求:通知请求是异步发起的,不会阻塞原请求的响应流程,用户体验不受影响。
  • 灵活调整触发条件:如果不需要所有请求后都获取通知,只需要修改判断逻辑即可,比如只在/getNews、/getUser等特定请求后触发:
    const allowedUrls = ['/getNews', '/getUser'];
    if (allowedUrls.includes(currentRequestUrl)) {
      // 发起通知请求
    }
    
  • 全局Axios的情况:如果你直接用全局axios(比如axios.get('/api/getNews')),只需要把上面的apiClient换成axios即可。

内容的提问来源于stack exchange,提问作者mohammad zahedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:20:31