开箱即用的axios解决请求重试和取消请求🔥🔥🔥

po-axios(破)

介绍

在现代Web开发中,网络请求管理是一个非常重要的方面,尤其是在构建复杂的前端应用时。为了提高应用的性能和用户体验,我们需要更加灵活和高效地处理网络请求,包括请求的取消和重试机制。本项目通过对axios进行二次封装,实现了请求取消和请求重试的功能,同时完全保留了axios原有的功能和灵活性。

这一封装不仅提高了网络请求的控制度,使开发者可以更细致地管理请求的生命周期,如在组件卸载时取消未完成的请求,或在网络不稳定时自动重试请求,而且还继承了axios的所有优点,包括易于使用的API、拦截器机制等。此外,本封装支持全局配置和请求级别的配置,使其可以灵活地应对不同场景的需求。

通过这个项目,开发者可以极大地减少网络请求管理的代码量,提高代码的可维护性和应用的响应性。这对于需要处理大量网络请求,尤其是在需要优化网络请求性能的应用中,将是一个非常有用的工具。

特性

  • 取消请求:在复杂的场景中,允许取消未完成的请求,以避免页面渲染逻辑的错误。
  • 重试请求: 在用户网络环境不稳定时,自动重试请求,以达到更好的用户体验。
  • axios兼容性:只对axios进行了一层加工,保留axios原有的功能和灵活性,可以开箱即用,无需修改任何久代码。

安装

js 复制代码
npm install po-axios --save
// 由于依赖axios包,因此你的项目需要安装axios
npm install axios --save

快速上手

安装好po-axios后,在项目中引入po-axios:

js 复制代码
// main.js
import axios from 'axios';
import PoAxios from 'po-axios';
const axiosInstance = axios.create();
const instance = new PoAxios(axiosInstance);
app.config.globalProperties.$axios = instance;

PoAxios需要传入axios.create()返回的axios实例,就像使用axios一样,你可以在axios.create时设置你的自定义配置,并不会影响插件的功能,当然你可以在此基础上加以封装,例如:

例子

js 复制代码
// plugin.js
import axios from 'axios';
import PoAxios from './http';

const PoAxios = {
    install(app: any) {
            const axiosInstance = axios.create();
            const instance = new PoAxios(axiosInstance);
            app.config.globalProperties.$axios = instance;
    },
};

export default PoAxios;

// main.js
import poAxios from '@/utils/plugin';
import App from './App.vue';

const app = createApp(App);

app.use(poAxios);
app.mount('#app');

可以按照以往使用axios一样,自由的实现你的需求。

请求取消的使用

js 复制代码
// page.vue
<script>
    export default {
        methods: {
            postRequest() {
                this.$axios.post('/api/user', {
                    // your params
                }).then(res => {
                     // do something
                }).catch(error => {
                    // 如果请求被取消,执行catch,此时error为undefined
                });
            },
            /**
             * @api cancelRequest 
             * @param url<string>
             */
            // 取消/api/user请求
            cancelRequest() {
                this.$axios.cancelRequest('/api/user');
            },
            /**
             * @api cancelAllRequest 
             */
            // 取消所有已发送请求
            cancelAllRequest() {
                this.$axios.cancelAllRequest();
            }
        }
    }
</script>

请求取消的使用

js 复制代码
// page.vue
<script>
    export default {
        methods: {
             /**
             * @options retryConfig {
             * 	retry: boolean;
             *  retryCount: number
             * 	retryDelay: number
             * 	shouldRetry: (AxiosError) => boolean;
             * }
             */
            getRequest() {
                this.$axios.set('/api/getData', {
                    // your params
                    retryConfig: {
                        retry: true, // 开启失败后重试, 默认为false
                        retryCount: 3, // 重试次数,包含第一次,默认3次
                        retryDelay: 300 // 重试时间间隔,默认300
                        shouldRetry: (error) => {
                            // 是否重试,每次重新发送请求前调用该函数,error为请求错误对象
                            return false; // 函数必须返回一个布尔值,true为同意重试,false为拒绝重试,则执行catch
                        }
                    }
                }).then(res => {
                    // 请求重试后成功才执行then
                }).catch(error => {
                    // 如果重试次数到达上限还是失败,执行catch
                });
            }
        }
    }
</script>
相关推荐
QQ1__8115175154 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态5 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子5 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室5 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI5 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing5 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者5 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册5 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李5 小时前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢5 小时前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web