fix: 补齐其余 3 处任务轮询的服务断开容错
此前只有榜单更新一处做了处理(连续 3 次查询失败即提示并结束轮询)。 其余 3 处——app.js executeTask(通用 AI 任务)、data-pages 批量更新账号、视频解析——仍是 catch 后 continue, 服务被回收时会静默空转 15~35 分钟到超时,用户只看到按钮转圈。 现 4 处轮询口径统一。
This commit is contained in:
1 parent
a3ca08eabd
commit
1f7d695afd
2 files changed
+17
-3
No files matched your search
@@ -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; }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user