From 1f7d695afd75621d7faeb3d5ef53c5de8c5a9bee Mon Sep 17 00:00:00 2001 From: maogeigei Date: Thu, 8 Oct 2026 17:22:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A1=A5=E9=BD=90=E5=85=B6=E4=BD=99=203?= =?UTF-8?q?=20=E5=A4=84=E4=BB=BB=E5=8A=A1=E8=BD=AE=E8=AF=A2=E7=9A=84?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=96=AD=E5=BC=80=E5=AE=B9=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 此前只有榜单更新一处做了处理(连续 3 次查询失败即提示并结束轮询)。 其余 3 处——app.js executeTask(通用 AI 任务)、data-pages 批量更新账号、视频解析——仍是 catch 后 continue, 服务被回收时会静默空转 15~35 分钟到超时,用户只看到按钮转圈。 现 4 处轮询口径统一。 --- .../短视频脚本创作/V1.0/mcn-workshop/public/app.js | 12 +++++++++++- .../V1.0/mcn-workshop/public/data-pages.js | 8 ++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/project/短视频脚本创作/V1.0/mcn-workshop/public/app.js b/project/短视频脚本创作/V1.0/mcn-workshop/public/app.js index 29d1def..37245f0 100644 --- a/project/短视频脚本创作/V1.0/mcn-workshop/public/app.js +++ b/project/短视频脚本创作/V1.0/mcn-workshop/public/app.js @@ -80,9 +80,19 @@ async function executeTask(opts) { } // 轮询任务状态直到完成(最长 30 分钟,账号提炼等任务耗时较长) const deadline = Date.now() + 30 * 60 * 1000; + let pollFail = 0; // 10-08:服务断开时 api() 持续抛错,连续 3 次即提示并结束,避免静默空转到超时 while (Date.now() < deadline) { await new Promise((r) => setTimeout(r, 5000)); - try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); } catch (e) { continue; } + try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); pollFail = 0; } + catch (e) { + if (++pollFail >= 3) { + restore(); + TaskProgress.hide(); + showToast('⚠️ 工作台服务已断开(连续 3 次查询失败);任务仍在后台执行,重启工作台后可继续查看'); + return; + } + continue; + } if (s) TaskProgress.update(s, opts.label || '工作台任务'); if (!s || s.state === 'notfound') { finished = true; finish(s || null); break; } if (s.state === 'done') { finished = true; finish(s); showToast('✅ 任务执行完成,页面已自动刷新'); refreshCurrentPage(); break; } diff --git a/project/短视频脚本创作/V1.0/mcn-workshop/public/data-pages.js b/project/短视频脚本创作/V1.0/mcn-workshop/public/data-pages.js index 2cf0563..77cfb27 100644 --- a/project/短视频脚本创作/V1.0/mcn-workshop/public/data-pages.js +++ b/project/短视频脚本创作/V1.0/mcn-workshop/public/data-pages.js @@ -1231,12 +1231,14 @@ function updateFollowedAccounts(btn) { const taskId = r.id; const taskTitle = '更新账号·' + name; TaskProgress.show(taskTitle); + let pollFail = 0; // 10-08:服务断开时连续 3 次查询失败即提示,避免静默空转 const deadline = Date.now() + 20 * 60 * 1000; let state = 'running'; while (Date.now() < deadline) { await new Promise((res) => setTimeout(res, 5000)); let s = null; - try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); } catch (e) { continue; } + try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); pollFail = 0; } + catch (e) { if (++pollFail >= 3) { restore(); TaskProgress.hide(); showToast('⚠️ 工作台服务已断开(连续 3 次查询失败);任务仍在后台执行'); return; } continue; } if (s) TaskProgress.update(s, taskTitle); if (!s || s.state === 'notfound') { state = 'done'; break; } if (s.state === 'done') { state = 'done'; break; } @@ -1968,10 +1970,12 @@ function readVideoTaskRec(videoId) { async function watchVideoParseTask(videoId, taskId, reload) { let s = null; TaskProgress.show('视频解析'); + let pollFail = 0; // 10-08:服务断开时连续 3 次查询失败即提示,避免静默空转 const deadline = Date.now() + 35 * 60 * 1000; while (Date.now() < deadline) { await new Promise((r) => setTimeout(r, 5000)); - try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); } catch (e) { continue; } + try { s = await api('/api/run/status?id=' + encodeURIComponent(taskId)); pollFail = 0; } + catch (e) { if (++pollFail >= 3) { TaskProgress.hide(); showToast('⚠️ 工作台服务已断开(连续 3 次查询失败);任务仍在后台执行'); return; } continue; } if (s) TaskProgress.update(s, '视频解析'); if (!s || s.state === 'notfound' || s.state === 'done' || s.state === 'error' || s.state === 'review') break; }