|
|
@@ -171,7 +171,16 @@ export function useRafThrottle<T extends FunctionArgs>(fn: T): T {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
-export function resetMicroContentWH(domId, callBack?: Function, maxWaitMs = 60000) {
|
|
|
+export function resetMicroContentWH(domId, callBack?: Function, onTimeout?: Function, maxWaitMs = 60000) {
|
|
|
+ // [审计-第三轮 R3-8] 恢复 2eb75d33 语义 + 加类型防御
|
|
|
+ // 原行为(团队 7e9858ec 回滚后):签名变成 (domId, callBack?, maxWaitMs=60000),
|
|
|
+ // 但 4 个调用方(needAir/ventDoc/ventModal/ventModal2D.vue)仍按旧签名传 3 个参数,
|
|
|
+ // 错误态回调(onTimeout)被塞进 maxWaitMs,number 与 function 比较恒 false →
|
|
|
+ // 60s 超时兜底永不触发:子应用加载失败时遮罩永久转圈、loadFailed 永不置位、每秒轮询不停。
|
|
|
+ // 现行为:签名恢复为 (domId, callBack?, onTimeout?, maxWaitMs=60000),超时分支里先调 onTimeout() 再调 callBack(),
|
|
|
+ // 并加防御——maxWaitMs 不是数字时回退 60000,防止将来再出现"回调被塞进数值参数"这类失配。
|
|
|
+ // 原实现见 2eb75d33 [Fix SEC-20260913] 子应用加载超时错误态与重试入口。
|
|
|
+ if (typeof maxWaitMs !== 'number') maxWaitMs = 60000;
|
|
|
// [fix-subapp-loading] 增加超时兜底:原实现每秒无限轮询等待微应用容器出现内容,
|
|
|
// 微应用挂载失败/被卸载时容器永远为空 → 加载遮罩永久转圈(整页"正在加载"卡死,见 docs/17 §8)。
|
|
|
// 超时后强制放行(隐藏遮罩),把"整页永久卡死"降级为"页面可见但内容可能缺失"。
|
|
|
@@ -188,6 +197,7 @@ export function resetMicroContentWH(domId, callBack?: Function, maxWaitMs = 6000
|
|
|
} else if (Date.now() - start >= maxWaitMs) {
|
|
|
done = true;
|
|
|
console.error('[fix-subapp-loading] 微应用容器等待超时,强制放行:', domId);
|
|
|
+ if (onTimeout) onTimeout();
|
|
|
if (callBack) callBack();
|
|
|
} else {
|
|
|
setTimeout(poll, 1000);
|