From f34ec708a6daca758713d65f18447417aba923ca Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 11 Sep 2026 22:28:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(ai-avatar):=20=E5=AF=B9=E5=8F=A3=E5=9E=8B/?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=E8=BD=AE=E8=AF=A2=E5=A2=9E=E5=8A=A0=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对口型最多轮询5分钟(100次×3s),渲染最多轮询10分钟(200次×3s), 超时后停止轮询并显示错误提示,避免任务异常时前端无限轮询卡死。 --- apps/web/src/pages/ai-avatar/AiAvatarPage.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx b/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx index e9b244335..27503c07f 100644 --- a/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx +++ b/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx @@ -233,7 +233,17 @@ const AiAvatarPage: React.FC = () => { setRenderErrorMessage("") if (renderTimerRef.current) clearInterval(renderTimerRef.current) + let renderPollCount = 0 + const RENDER_MAX_POLLS = 200 // 最多轮询 10 分钟(200 次 × 3s) renderTimerRef.current = setInterval(async () => { + renderPollCount++ + if (renderPollCount > RENDER_MAX_POLLS) { + if (renderTimerRef.current) clearInterval(renderTimerRef.current) + renderTimerRef.current = null + setRenderStatus("failed") + setRenderErrorMessage("渲染超时(超过10分钟),请稍后在任务历史查看结果") + return + } try { const updated = await getRenderJob(job.id) setRenderProgress(updated.progress ?? 0)