Bladeren bron

网络重试的消息提示去重

Michael Wang 3 jaren geleden
bovenliggende
commit
48f50eda08
2 gewijzigde bestanden met toevoegingen van 29 en 3 verwijderingen
  1. 13 1
      src/plugins/axiosApp.ts
  2. 16 2
      src/plugins/axiosNoAuth.ts

+ 13 - 1
src/plugins/axiosApp.ts

@@ -11,7 +11,8 @@ const config = {
 };
 
 const _axiosApp = axios.create(config);
-axiosRetry(_axiosApp);
+// eslint-disable-next-line @typescript-eslint/unbound-method
+axiosRetry(_axiosApp, { retries: 0, retryDelay: axiosRetry.exponentialDelay });
 
 _axiosApp.interceptors.request.use(
   function (config) {
@@ -39,6 +40,8 @@ _axiosApp.interceptors.request.use(
 );
 
 // Add a response interceptor
+// 这个用途是为了retry网络请求不要疯狂的报错,如果最后没成功,只报第一次的错误
+let lastRequestTimeForRetry = 0;
 _axiosApp.interceptors.response.use(
   (response) => {
     if (response.config.setGlobalMask) {
@@ -50,6 +53,15 @@ _axiosApp.interceptors.response.use(
     if (error.config?.setGlobalMask) {
       store.decreaseGlobalMaskCount("axios");
     }
+    // console.log(error.config, error.config["axios-retry"].retryCount);
+    if (error.config["axios-retry"]) {
+      const thisTime = error.config["axios-retry"].lastRequestTime;
+      if (lastRequestTimeForRetry === thisTime) {
+        return Promise.reject(error);
+      } else {
+        lastRequestTimeForRetry = thisTime;
+      }
+    }
     const showErrorMessage = !error.config?.noErrorMessage;
     if (!error.response) {
       if (showErrorMessage) {

+ 16 - 2
src/plugins/axiosNoAuth.ts

@@ -7,14 +7,17 @@ const config = {
 };
 
 const _axiosNoAuth = axios.create(config);
-axiosRetry(_axiosNoAuth);
+axiosRetry(_axiosNoAuth, {
+  retries: 0,
+  // eslint-disable-next-line @typescript-eslint/unbound-method
+  retryDelay: axiosRetry.exponentialDelay,
+});
 
 /**
  * 本应用的无auth api,或者第三方的api
  * 1. 统一使用的http api,方便使用,无需fetch
  * 2. 无默认headers
  */
-
 _axiosNoAuth.interceptors.request.use(
   function (config) {
     return config;
@@ -26,11 +29,22 @@ _axiosNoAuth.interceptors.request.use(
 );
 
 // Add a response interceptor
+// 这个用途是为了retry网络请求不要疯狂的报错,如果最后没成功,只报第一次的错误
+let lastRequestTimeForRetry = 0;
 _axiosNoAuth.interceptors.response.use(
   (response) => {
     return response;
   },
   (error) => {
+    // console.log(error.config, error.config["axios-retry"].retryCount);
+    if (error.config["axios-retry"]) {
+      const thisTime = error.config["axios-retry"].lastRequestTime;
+      if (lastRequestTimeForRetry === thisTime) {
+        return Promise.reject(error);
+      } else {
+        lastRequestTimeForRetry = thisTime;
+      }
+    }
     if (!error.response) {
       // "Network Error" 网络不通,直接返回
       $message.error("网络连接异常,请检查网络设置。");