in spring-ai-alibaba-jmanus/src/main/resources/static/plan-template/js/plan-template.js [346:421]
async function pollPlanStatus() {
// 使用currentPlanId来轮询计划状态
if (!currentPlanId || isPolling) {
return;
}
try {
isPolling = true;
// 调用获取计划详情的API,使用currentPlanId作为参数
const planData = await ManusAPI.getDetails(currentPlanId);
// 如果planData为null(可能404或其他错误),继续轮询
if (!planData) {
isPolling = false;
return;
}
// 处理计划数据
handlePlanData(planData);
// 如果计划仍在生成中,继续轮询
if (!planData.completed && planData.steps && planData.steps.length > 0) {
isPolling = false;
} else {
// 计划生成完成
isGenerating = false;
updateUIState();
stopPolling();
// 在计划完成时,再次获取完整数据,确保所有思考步骤都被加载
try {
console.log("计划已完成,刷新最终数据...");
// 最后一次获取完整数据
const finalPlanData = await ManusAPI.getDetails(currentPlanId);
if (finalPlanData) {
// 更新UI,确保最终数据正确显示
handlePlanData(finalPlanData);
// 触发计划完成事件
if (typeof PlanUIEvents !== 'undefined') {
console.log("发送计划完成事件,带有完整数据");
PlanUIEvents.EventSystem.emit('plan-completed', finalPlanData);
}
} else {
// 如果无法获取最终数据,仍使用当前数据
console.log("无法获取最终数据,使用当前数据");
if (typeof PlanUIEvents !== 'undefined') {
PlanUIEvents.EventSystem.emit('plan-completed', planData);
}
}
} catch (error) {
console.error("获取最终数据失败:", error);
// 出错时仍使用当前数据
if (typeof PlanUIEvents !== 'undefined') {
PlanUIEvents.EventSystem.emit('plan-completed', planData);
}
}
// 计划完成后,删除后端执行详情记录释放资源
try {
// 延迟时间从5秒增加到10秒,确保前端有足够时间处理所有数据
setTimeout(async () => {
await fetch(`${ManusAPI.BASE_URL}/details/${currentPlanId}`, {
method: 'DELETE'
});
console.log(`已删除已完成的计划执行记录: ${currentPlanId}`);
}, 10000); // 10秒后删除
} catch (error) {
console.log(`删除计划执行记录失败: ${error.message}`);
}
}
} catch (error) {
console.error('轮询计划状态出错:', error);
isPolling = false;
}
}