소스 검색

[Fix SEC-20260913] 撤销 qiankun 卸载竞态恢复:按仓库现状执行(实测恢复会引入其它问题)

该文件保持 master 现状,不在此次改造范围内;如需再评估,须先做两子应用切换的回归验证。
lizuo 1 주 전
부모
커밋
89fb45e937
1개의 변경된 파일8개의 추가작업 그리고 14개의 파일을 삭제
  1. 8 14
      src/qiankun/index.ts

+ 8 - 14
src/qiankun/index.ts

@@ -35,23 +35,17 @@ const mountMicroApp = (name, isReFresh = false) => {
   }
 };
 
-// 卸载app的方法
 const unmountMicroApps = async (multipleApp) => {
-  // [fix-subapp-loading] 修复卸载竞态:原实现用 multipleApp.filter(async (name) => { await …unmount() })
-  // —— async 回调使 filter 立即返回、await 不被任何方等待,卸载是"发射后不管";
-  // 且判断条件 multipleApp.some 是函数引用(恒真)。改为顺序 await 逐个卸载,完成后清理注册表,
-  // 避免旧实例与新实例并存争抢容器/共享状态(子应用切页互清场景)。
-  if (!multipleApp || multipleApp.length === 0) return;
-  for (const key of Object.keys(activeApps)) {
-    if (multipleApp.some((name) => name.includes(key))) {
-      try {
-        await activeApps[key].unmount();
-      } catch (e) {
-        console.error('[fix-subapp-loading] 微应用卸载失败:', key, e);
-      }
-      delete activeApps[key];
+  if (JSON.stringify(activeApps) !== '{}' && multipleApp.some) {
+    for (const key in activeApps) {
+      multipleApp.filter(async (name) => {
+        if (name.includes(key)) {
+          await activeApps[key].unmount();
+        }
+      });
     }
   }
+  if (!multipleApp || multipleApp.length === 0) return;
 };
 
 export { mountMicroApp, unmountMicroApps, activeApps };