async function pollPlanStatus()

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;
    }
}