开箱即用的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>
相关推荐
程序员大金13 分钟前
基于SSM+Vue+MySQL的酒店管理系统
前端·vue.js·后端·mysql·spring·tomcat·mybatis
清灵xmf16 分钟前
提前解锁 Vue 3.5 的新特性
前端·javascript·vue.js·vue3.5
白云~️29 分钟前
监听html元素是否被删除,删除之后重新生成被删除的元素
前端·javascript·html
金灰37 分钟前
有关JS下隐藏的敏感信息
前端·网络·安全
Yxmeimei38 分钟前
css实现居中的方法
前端·css·html
6230_40 分钟前
git使用“保姆级”教程2——初始化及工作机制解释
开发语言·前端·笔记·git·html·学习方法·改行学it
二川bro43 分钟前
Vue 修饰符 | 指令 区别
前端·vue.js
一只欢喜1 小时前
uniapp使用uview2上传图片功能
前端·uni-app
尸僵打怪兽1 小时前
后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)
前端·javascript·vue.js·elementui·axios·博客·后台管理系统
ggome2 小时前
Uniapp低版本的安卓不能用解决办法
前端·javascript·uni-app