fix: Step7 确认生成优先调用 confirmGeneration 复用预览产物,解决卡 10% 问题 #1480
Reference in New Issue
Block a user
Delete Branch "fix/confirm-generation-reuse-preview"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
Step7 点击"确认生成"后,进度卡在 10% 永远不结束。
根因
前端调用
createGenerationTask创建全新渲染任务,后端 worker 因source_edit_plan_id为空进入 failed 分支但未更新 DB 状态,导致前端轮询永远停在 running。修复策略
previewTaskId暴露给父组件;Step7 确认生成优先调用confirmGeneration(previewTaskId)复用预览产物,后端直接提升为正式任务(秒出 ≤3s)confirmGeneration失败时,退回createGenerationTask并传递source_edit_plan_id,后端走全量渲染改动文件(7 个)
useGenerateVideo.ts:导入 confirmGeneration,新增双路径逻辑useGenerateFormState/index.ts:新增 previewTaskId 共享状态useStep6Cover.ts:createPreview 后回调 onPreviewTaskCreatedStep6CoverSettings.tsx/GenerateStepContent.tsx:透传回调generate-video/types.ts:UseGenerateVideoProps 新增 previewTaskId🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
titleSettings),GeneratePage中的useEffect会将previewTaskId重置为null。然而,useStep6Cover中正在进行的旧任务并未被取消。当旧任务完成时,它仍会调用onPreviewTaskCreated,将previewTaskId更新为旧任务的 ID。此时如果用户点击生成,系统会复用这个与当前 UI 状态不匹配的旧预览产物,导致生成的视频内容与用户预期不符。useStep6Cover中引入请求版本控制或校验机制。可以在任务开始时记录当前的参数指纹(如titleSettings的哈希值),在onPreviewTaskCreated回调中校验当前指纹是否与任务启动时一致,若不一致则忽略回调,不更新previewTaskId。💡 改进建议(不阻塞合并)
JSON.stringify(titleSettings)作为useEffect的依赖项存在隐患。如果对象属性的顺序在不同渲染中发生变化(例如某些字段重排或动态增删),会导致字符串不一致,从而意外触发previewTaskId清除,影响性能或用户体验。建议使用显式的字段依赖(如titleSettings.title,titleSettings.font等)或使用稳定的深比较函数。✅ 良好实践
useGenerateVideo.ts中实现了confirmGeneration失败后自动降级到createGenerationTask的逻辑,保证了功能的健壮性。useGenerateFormState集中管理previewTaskId,并在参数变更时自动清理,思路清晰。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好
🤖 由 AI 代码审查机器人自动生成 | 2026-08-24 07:18:50 | 模型:
d2270fe3bdto0f645b01e8CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1480 已关闭或合并,对应的预览环境已被清理。