Эх сурвалжийг харах

refactor: 1. 用 ref 包装 flag; 2. 在最后 清理 flag;

eric 5 сар өмнө
parent
commit
13c8318adc

+ 18 - 17
playground/src/store/auth.ts

@@ -78,31 +78,32 @@ export const useAuthStore = defineStore('auth', () => {
     };
   }
 
-  let isLoggingOut = false; // 正在 logout 标识, 防止 /logout 死循环.
+  const isLoggingOut = ref(false); // 正在 logout 标识, 防止 /logout 死循环.
 
   async function logout(redirect: boolean = true) {
-    if (isLoggingOut) return;
-    isLoggingOut = true;
+    if (isLoggingOut.value) return; // 正在登出中, 说明已进入循环, 直接返回.
+    isLoggingOut.value = true; // 设置 标识
+
     try {
       await logoutApi();
+
+      resetAllStores();
+      accessStore.setLoginExpired(false);
+
+      // 回登录页带上当前路由地址
+      await router.replace({
+        path: LOGIN_PATH,
+        query: redirect
+          ? {
+              redirect: encodeURIComponent(router.currentRoute.value.fullPath),
+            }
+          : {},
+      });
     } catch {
       // 不做任何处理
     } finally {
-      isLoggingOut = false;
+      isLoggingOut.value = false; // 重置 标识
     }
-
-    resetAllStores();
-    accessStore.setLoginExpired(false);
-
-    // 回登录页带上当前路由地址
-    await router.replace({
-      path: LOGIN_PATH,
-      query: redirect
-        ? {
-            redirect: encodeURIComponent(router.currentRoute.value.fullPath),
-          }
-        : {},
-    });
   }
 
   async function fetchUserInfo() {