2
0
Просмотр исходного кода

🐛 fix(exam): 修复考试卡片在无当前问题时的崩溃问题

- 在ExamCard组件中添加问题存在性检查,避免空值导致的状态更新错误
- 修改useSocketClient中getCurrentQuestion方法的返回类型,确保无问题时返回null而非reject
- 优化Socket通信错误处理逻辑,当Socket未连接或无问题时返回null而非抛出错误
yourname 6 месяцев назад
Родитель
Сommit
1cd2887964

+ 5 - 3
src/client/mobile/components/Exam/ExamCard.tsx

@@ -63,9 +63,11 @@ export default function ExamCard() {
     
     // 获取当前问题并更新状态
     const question = await answerManagement.getCurrentQuestion(classroom);
-    setCurrentDate(question.date);
-    setCurrentPrice(String(question.price));
-    setIsStarted(true);
+    if (question) {
+      setCurrentDate(question.date);
+      setCurrentPrice(String(question.price));
+      setIsStarted(true);
+    }
     
     // 获取用户回答记录
     if (user?.id) {

+ 3 - 3
src/client/mobile/components/Exam/hooks/useSocketClient.ts

@@ -321,14 +321,14 @@ export function useSocketClient(roomId: string | null) {
     }, '获取用户答案失败');
   }, [client]);
 
-  const getCurrentQuestion = useCallback(async (roomId: string): Promise<QuizState> => {
-      if (!client) return Promise.reject(new Error('Socket not connected'));
+  const getCurrentQuestion = useCallback(async (roomId: string): Promise<QuizState | null> => {
+      if (!client) return Promise.resolve(null);
       
       return handleAsyncOperation(async () => {
         return new Promise((resolve, reject) => {
           client.emit('exam:currentQuestion', { roomId }, (question: QuizState) => {
             if (!question) {
-              reject(new Error('No current question available'));
+              resolve(null);
               return;
             }
             resolve(question);