- 删除 ValidationQueue 双轨持久化队列,替换为纯内存 AsyncWorkerPool - 引入统一后台任务框架 JobExecutor(Job/CrawlJob/ValidateAllJob) - 新增 PluginRunner 统一插件执行(超时、重试、健康检查、统计) - 重构 SchedulerService 职责收敛为仅定时触发 ValidateAllJob - 使用 AsyncExitStack 重构 lifespan,安全管理长生命周期资源 - 路由层瘦身 50%+,业务异常上抛由全局中间件统一处理 - 实现设置全热更新(WorkerPool 并发、Validator 超时即时生效) - 前端 Store 强制写后重新拉取,消除乐观更新数据不同步 - 删除 queue.py / task_repo.py / task_service.py - 新增 execution 单元测试,全部 85 个测试通过
29 lines
747 B
JavaScript
29 lines
747 B
JavaScript
import { tasksAPI } from '../api'
|
|
|
|
const POLL_INTERVAL = 1000
|
|
const MAX_POLL_ATTEMPTS = 30
|
|
|
|
/**
|
|
* 轮询任务状态直到完成或失败
|
|
* @param {string} taskId
|
|
* @returns {Promise<object>}
|
|
*/
|
|
export async function pollTaskStatus(taskId) {
|
|
for (let i = 0; i < MAX_POLL_ATTEMPTS; i++) {
|
|
await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL))
|
|
const response = await tasksAPI.getTaskStatus(taskId)
|
|
if (response.code !== 200) {
|
|
continue
|
|
}
|
|
const status = response.data.status
|
|
if (status === 'completed' || status === 'failed') {
|
|
return response
|
|
}
|
|
}
|
|
return {
|
|
code: 200,
|
|
message: '任务进行中,请稍后刷新查看结果',
|
|
data: { task_id: taskId, status: 'running' }
|
|
}
|
|
}
|