Răsfoiți Sursa

优化心跳错误处理

Michael Wang 3 ani în urmă
părinte
comite
eecdefb3df

+ 21 - 2
src/features/OnlineExam/Examing/RemainTime.vue

@@ -66,8 +66,15 @@ onUnmounted(() => cancelHeartBeat && cancelHeartBeat());
 let handledNetworkException = false;
 let cancelHeartBeat: Canceler;
 async function getRemainTimeFromServer() {
-  if (store.exam.remainTime <= 0) {
-    logger({ cnl: ["server"], act: "remainTime=0, stop heartbeat" });
+  if (store.exam.remainTime <= 0 && store.exam.isSubmittingPaper) {
+    logger({
+      cnl: ["server"],
+      act: "stop heartbeat",
+      ext: {
+        remainTime: store.exam.remainTime,
+        isSubmittingPaper: store.exam.isSubmittingPaper,
+      },
+    });
     return;
   }
   try {
@@ -119,6 +126,18 @@ async function getRemainTimeFromServer() {
       possibleError: error,
     });
 
+    // 当多次重试后,可能时过境迁,心跳已经没有意义了
+    if (store.exam.remainTime <= 0 && store.exam.isSubmittingPaper) {
+      logger({
+        cnl: ["server"],
+        act: "心跳错误处理停止",
+        ext: {
+          remainTime: store.exam.remainTime,
+          isSubmittingPaper: store.exam.isSubmittingPaper,
+        },
+      });
+      return;
+    }
     $dialog.error({
       title: "网络连接异常",
       content: "退出考试",

+ 1 - 0
src/features/OnlineExam/Examing/setups/useSubmitPaper.tsx

@@ -63,6 +63,7 @@ export function useRealSubmitPaper(examId: number, examRecordDataId: number) {
       return;
     } else {
       sumbitLock = true;
+      store.exam.isSubmittingPaper = true;
     }
     store.increaseGlobalMaskCount("realSubmitPaper");
     store.spinMessage = "正在交卷,请耐心等待...";

+ 2 - 0
src/types/student-client.d.ts

@@ -187,6 +187,8 @@ export type Store = {
     }[];
     /** 是否超过了切屏次数 */
     isExceededSwitchCount: boolean;
+    /** 是否正在交卷 */
+    isSubmittingPaper: boolean;
   };
   // /** 考试中的状态 */
   // examing: {};