连续多次请求,loading防止闪烁,避免loading连续关闭开启
方法:数量统计,函数防抖,二次判断
import axios, { type AxiosRequestConfig, type AxiosResponse } from 'axios';
import { nextTick } from 'vue';
import {
showLoadingToast,
} from 'vant';
import { useDebounceFn } from '@vueuse/core';
let loadingReqCount = 0;
let loadingInstance: any;
function showLoading() {
if (loadingReqCount === 0 && !loadingInstance) {
loadingInstance = showLoadingToast({
message: '加载中...',
forbidClick: true,
duration: 0,
});
}
loadingReqCount++;
}
function closeLoading() {
loadingReqCount--;
loadingReqCount = Math.max(loadingReqCount, 0);
if (loadingReqCount === 0 || loadingInstance) {
hideLoading();
}
}
const hideLoading = useDebounceFn(() => {
if (loadingReqCount === 0) {
loadingInstance.close();
loadingInstance = null;
}
}, 300);
service.interceptors.request.use(
(config: AxiosRequestConfig) => {
showLoading();
****
},
error => {
closeLoading();
****
},
);
service.interceptors.response.use(
(response: AxiosResponse) => {
****
closeLoading();
****
},
error => {
****
closeLoading();
****
},
);
export default service;