我目前正在使用Axios的Vue 3应用程序。基本上,我的用例是我有一个全局加载指示器,它使用请求拦截器激活,然后在响应拦截器中停用。这对于只有一个API请求的页面非常有效。当我们有并发请求时,这将成为并发出。
我一直在搜索S.O.我似乎找不到好的解决办法我知道你可以使用AbortController取消请求,但是axios文档对此并不太详细。我https://github.com/axios/axios#abortcontroller想发生的是,如果我以前的请求返回一个异常,我想取消剩余的挂起调用.
我也想知道这是否可以通过某种队列系统来实现?我似乎找不到任何解决这个问题的最佳实践。
蒂亚!
axiosClient.ts
// we first import the axios library
import { notify } from '@/services/notificationService';
import axios, { AxiosError } from 'axios';
import { storeToRefs } from 'pinia';
import { EnvironmentEnum } from './interfaces/environment-enum';
import { useConfigStore } from '@/stores/configuration-store';
import axiosRetry from 'axios-retry';
const axiosClient = axios.create({
withCredentials: true,
});
axiosRetry(axios, {
retries: 3,
retryDelay: () => {
return 1000;
},
});
/** Adding the response interceptors */
axiosClient.interceptors.request.use((config) => {
const store = useConfigStore();
const { isLoading } = storeToRefs(useConfigStore());
const { selectedEnvironment } = storeToRefs(store);
config.baseURL = `${EnvironmentEnum[selectedEnvironment.value]}/`;
isLoading.value = true;
return config;
});
axiosClient.interceptors.response.use(
(response) => {
const { isLoading } = storeToRefs(useConfigStore());
isLoading.value = false;
return Promise.resolve(response);
},
(error: AxiosError) => {
const { isLoading } = storeToRefs(useConfigStore());
isLoading.value = false;
notify(error.code === 'ERR_NETWORK' ? error.message : `${JSON.stringify(error.response?.data)}`, 'danger');
}
);
export default axiosClient;
字符串
组件
const search = () => {
const data = ref();
let result = await call1();
if(result && result.status == 200)
data.value = await call2();
};
型
1条答案
按热度按时间edqdpe6u1#
来自Axios.CancelToken
通过API调用传递cancelToken,如果任何调用被取消,所有挂起的请求将通过调用
source.cancel
停止字符串