Kaynağa Gözat

延迟请求

ZaiZai 2 yıl önce
ebeveyn
işleme
cfe9cd6ebe
2 değiştirilmiş dosya ile 32 ekleme ve 38 silme
  1. 28 17
      src/api/request/httpApi.js
  2. 4 21
      src/api/request/index.js

+ 28 - 17
src/api/request/httpApi.js

@@ -5,29 +5,40 @@ import {getObjValue} from "js-fast-way"
 export const httpApi = async (obj, message = true) => {
     return new Promise((resolve) => {
         //发起请求
-        request(obj).then((response) => {
-            resolve(getResData(response, false));
-        }).catch((response) => {
+        request(obj).then(async (response) => {
+            resolve(await getResData(response, false));
+        }).catch(async (response) => {
             if (message) window.$message?.error(getMsgVal(response));
-            resolve(getResData(response, true));
+            resolve(await getResData(response, true));
         })
     });
 }
 
 //处理数据
-const getResData = (response, error = false) => {
-    const headers = getObjValue(response?.headers), resData = getObjValue(response?.data);
-    return {
-        response,
-        res: resData,
-        data: resData?.data,
-        code: resData?.code,
-        msg: resData?.msg,
-        status: response?.status,
-        disposition: headers['content-disposition'],
-        message: getMsgVal(response),
-        error: error
-    }
+const getResData = async (response, error = false) => {
+    return new Promise((resolve) => {
+        const {headers, data, config} = response
+        const headersx = getObjValue(headers), resData = getObjValue(data);
+        const httpData = {
+            response, res: resData, data: resData?.data, code: resData?.code, msg: resData?.msg, status: response?.status,
+            disposition: headersx['content-disposition'], message: getMsgVal(response), error: error
+        }
+        //处理延迟响应
+        const {startTime, endTime} = config.metadata
+        if (config.isDelay) {
+            const duration = endTime - startTime
+            if (duration < 500) {
+                setTimeout(() => {
+                    console.log('duration:', duration, '延迟请求:', endTime - new Date())
+                    resolve(httpData)
+                }, 1000 - duration)
+            } else {
+                resolve(httpData)
+            }
+        } else {
+            resolve(httpData)
+        }
+    })
 }
 
 //获取msg消息内容

+ 4 - 21
src/api/request/index.js

@@ -45,7 +45,9 @@ axios.interceptors.request.use(config => {
 });
 
 //http response 拦截
-axios.interceptors.response.use(async (res) => {
+axios.interceptors.response.use(res => {
+    //响应时间
+    res.config.metadata.endTime = new Date()
     //获取状态码
     const status = res.data?.code || res.status;
     const message = res.data?.msg || res.data['error_description'] || '未知错误';
@@ -58,29 +60,10 @@ axios.interceptors.response.use(async (res) => {
     if (status !== 200) {
         return Promise.reject(res);
     }
-    //判断响应时间
-    res.config.metadata.endTime = new Date()
-    if (res.config.isDelay) {
-        const {startTime, endTime} = res.config.metadata
-        const duration = endTime - startTime
-        if (duration > 200) {
-            return res;
-        } else {
-            await setDurationTimeout(duration)
-            return res;
-        }
-    } else {
-        return res;
-    }
+    return res;
 }, error => {
     window.$message?.error('请求异常!');
     return Promise.reject(new Error(error));
 });
 
-const setDurationTimeout = (duration) => {
-    setTimeout(() => {
-        return Promise.resolve(true)
-    }, 1000 - duration)
-}
-
 export default axios;