Parcourir la source

fix(axios): 修复封装的axios请求过快beforeRequestCallback,beforeResponseCallback只触发一次 (#84)

hb0730 il y a 3 ans
Parent
commit
8ffd341443
1 fichiers modifiés avec 8 ajouts et 19 suppressions
  1. 8 19
      src/utils/http/core.ts

+ 8 - 19
src/utils/http/core.ts

@@ -41,12 +41,6 @@ class EnclosureHttp {
   // 记录当前这一次cancelToken的key
   private currentCancelTokenKey = "";
 
-  private beforeRequestCallback: EnclosureHttpRequestConfig["beforeRequestCallback"] =
-    undefined;
-
-  private beforeResponseCallback: EnclosureHttpRequestConfig["beforeResponseCallback"] =
-    undefined;
-
   public get cancelTokenList(): Array<cancelTokenType> {
     return this.sourceTokenList;
   }
@@ -126,8 +120,8 @@ class EnclosureHttp {
         this.cancelRepeatRequest();
         this.currentCancelTokenKey = cancelKey;
         // 优先判断post/get等方法是否传入回掉,否则执行初始化设置等回掉
-        if (typeof this.beforeRequestCallback === "function") {
-          this.beforeRequestCallback($config);
+        if (typeof config.beforeRequestCallback === "function") {
+          config.beforeRequestCallback($config);
           return $config;
         }
         if (EnclosureHttp.initConfig.beforeRequestCallback) {
@@ -158,20 +152,21 @@ class EnclosureHttp {
     const instance = EnclosureHttp.axiosInstance;
     instance.interceptors.response.use(
       (response: EnclosureHttpResoponse) => {
+        const $config = response.config;
         // 请求每次成功一次就删除当前canceltoken标记
-        const cancelKey = EnclosureHttp.genUniqueKey(response.config);
+        const cancelKey = EnclosureHttp.genUniqueKey($config);
         this.deleteCancelTokenByCancelKey(cancelKey);
+
+        NProgress.done();
         // 优先判断post/get等方法是否传入回掉,否则执行初始化设置等回掉
-        if (typeof this.beforeResponseCallback === "function") {
-          this.beforeResponseCallback(response);
-          this.beforeResponseCallback = undefined;
+        if (typeof $config.beforeResponseCallback === "function") {
+          $config.beforeResponseCallback(response);
           return response.data;
         }
         if (EnclosureHttp.initConfig.beforeResponseCallback) {
           EnclosureHttp.initConfig.beforeResponseCallback(response);
           return response.data;
         }
-        NProgress.done();
         return response.data;
       },
       (error: EnclosureHttpError) => {
@@ -209,12 +204,6 @@ class EnclosureHttp {
       ...axiosConfig
     } as EnclosureHttpRequestConfig);
     // 单独处理自定义请求/响应回掉
-    if (axiosConfig?.beforeRequestCallback) {
-      this.beforeRequestCallback = axiosConfig.beforeRequestCallback;
-    }
-    if (axiosConfig?.beforeResponseCallback) {
-      this.beforeResponseCallback = axiosConfig.beforeResponseCallback;
-    }
     return new Promise((resolve, reject) => {
       EnclosureHttp.axiosInstance
         .request(config)