已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
【背景】
我们是一个 B 端数据中台(React 18 + TypeScript 5 + Vite 5),核心链路里有大量「长耗时任务」:批量导出报表(典型 30s ~ 8min)、批量导入(最长 20min+)、跨租户数据迁移。后端模式很标准:POST /tasks 返回 {taskId},前端随后轮询 GET /tasks/{taskId} 拿 status ∈ {queued, running, success, failed} + progress ∈ [0,100] + resultUrl。任务本身有 30 分钟 TTL,过期被清理。
【现象】 生产上我们持续收到三类反馈,且都难以在本地复现:
【已尝试】
GET /tasks/{id} 加 If-None-Match 让后端 304 → 省了点带宽,但对上述三类问题无解。【期望得到的答案形态】 想听大家可复现的做法(最好带代码片段或配置):
DELETE 取消过期任务)?如果你也踩过「进度条卡死但任务其实成功了」这个坑,欢迎直接贴你的状态机定义和轮询封装代码,比空谈选型有用。