From 76dcc22ae61b4d9f5e81015e5d1020697384c7af Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 26 Nov 2025 09:41:20 +0800 Subject: [PATCH] refactor: improve polling mechanism for knowledge workflow action --- .../component/action/Result.vue | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/ui/src/views/knowledge-workflow/component/action/Result.vue b/ui/src/views/knowledge-workflow/component/action/Result.vue index 9653dbebb..d0880cf60 100644 --- a/ui/src/views/knowledge-workflow/component/action/Result.vue +++ b/ui/src/views/knowledge-workflow/component/action/Result.vue @@ -21,18 +21,38 @@ const state = computed(() => { return 'PADDING' }) const knowledge_action = ref() +let pollingTimer: any = null + const getKnowledgeWorkflowAction = () => { - knowledgeApi.getWorkflowAction(props.knowledge_id, props.id).then((ok) => { - knowledge_action.value = ok.data - if (['SUCCESS', 'FAILURE', 'REVOKED'].includes(state.value)) { - clearInterval(polling) - } - }) + knowledgeApi.getWorkflowAction(props.knowledge_id, props.id) + .then((ok) => { + knowledge_action.value = ok.data + if (['SUCCESS', 'FAILURE', 'REVOKED'].includes(state.value)) { + stopPolling() + } else { + // 请求完成后再设置下次轮询 + pollingTimer = setTimeout(getKnowledgeWorkflowAction, 2000) + } + }) + .catch(() => { + // 错误时也继续轮询 + pollingTimer = setTimeout(getKnowledgeWorkflowAction, 2000) + }) } -const polling = setInterval(getKnowledgeWorkflowAction, 2000) + +const stopPolling = () => { + if (pollingTimer) { + clearTimeout(pollingTimer) + pollingTimer = null + } +} + +// 启动轮询 +getKnowledgeWorkflowAction() onUnmounted(() => { - clearInterval(polling) + stopPolling() }) +