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; }