开箱即用的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>
相关推荐
熊的猫5 分钟前
webpack 核心模块 — loader & plugins
前端·javascript·chrome·webpack·前端框架·node.js·ecmascript
速盾cdn12 分钟前
速盾:vue的cdn是干嘛的?
服务器·前端·网络
四喜花露水44 分钟前
Vue 自定义icon组件封装SVG图标
前端·javascript·vue.js
前端Hardy1 小时前
HTML&CSS: 实现可爱的冰墩墩
前端·javascript·css·html·css3
web Rookie1 小时前
JS类型检测大全:从零基础到高级应用
开发语言·前端·javascript
Au_ust2 小时前
css:基础
前端·css
帅帅哥的兜兜2 小时前
css基础:底部固定,导航栏浮动在顶部
前端·css·css3
yi碗汤园2 小时前
【一文了解】C#基础-集合
开发语言·前端·unity·c#
就是个名称2 小时前
购物车-多元素组合动画css
前端·css
编程一生2 小时前
回调数据丢了?
运维·服务器·前端