diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx index d5a6c705e..e8f3754a3 100644 --- a/apps/ai-game-creator-shell/src/App.tsx +++ b/apps/ai-game-creator-shell/src/App.tsx @@ -866,6 +866,12 @@ export function App({ } function designAgentEventSubscriptionReady() { + // 业务动作只读取当前订阅代次;清理与下一次 effect 建立之间不能创建 + // 一个没有订阅 effect 接管的悬挂 promise。 + return designAgentEventSubscriptionReadyRef.current ?? Promise.resolve(); + } + + function createDesignAgentEventSubscriptionReady() { if (!designAgentEventSubscriptionReadyRef.current) { designAgentEventSubscriptionReadyRef.current = new Promise( (resolve) => { @@ -2106,12 +2112,13 @@ export function App({ }, [planningV2Active]); useEffect(() => { - const ready = designAgentEventSubscriptionReady(); + const ready = createDesignAgentEventSubscriptionReady(); if (!canSubscribeTauriEvents() || !planningV2Active) { resolveDesignAgentEventSubscriptionReady(); return () => { if (designAgentEventSubscriptionReadyRef.current === ready) { designAgentEventSubscriptionReadyRef.current = null; + createDesignAgentEventSubscriptionReady(); } }; } @@ -2168,6 +2175,7 @@ export function App({ resolveDesignAgentEventSubscriptionReady(); if (designAgentEventSubscriptionReadyRef.current === ready) { designAgentEventSubscriptionReadyRef.current = null; + createDesignAgentEventSubscriptionReady(); } }; // applyDesignView 读的是 refs 和当前项目路径,