在 Vue 3 的 setup 中处理定时轮询需用组合式 API 管理生命周期、防内存泄漏、支持响应式控制与灵活中断;主流做法包括:① onMounted + onUnmounted 手动管理 setInterval;② setTimeout 递归实现串行轮询;③ useIntervalFn 自动绑定生命周期;④ useRequest 启用声明式轮询。

使用 `onMounted` + `onUnmounted` 手动管理 setInterval
适合简单固定间隔轮询,要求轻量、无第三方依赖。
关键点:定时器 ID 必须用 ref 存储,确保在 setup 作用域内可读写;务必在 onUnmounted 中清除,不能只靠 beforeDestroy(已废弃)。
- 定义 ref 存储定时器:
const pollTimer = ref(null) - 在
onMounted中启动:pollTimer.value = setInterval(fetchData, 5000) - 在
onUnmounted中清理:if (pollTimer.value) clearInterval(pollTimer.value) - 建议首次请求立即执行(避免首屏空白等待),可在
onMounted中先调用一次fetchData()
用 `setTimeout` 实现“请求完成后再轮询”
避免并发请求堆积,尤其适用于接口耗时不稳定或需严格串行的场景(如状态轮询直到 success)。
本质是递归 + 异步等待,每次请求结束后才设下一次定时器。
使用 `@ainative/vue-sdk` 为 Vue 3 应用添加 AI 聊天功能。适用于以下场景:(1) 安装 `@ainative/vue-sdk`,(2) 在 Vue 组件中使用 `useChat` 组合式函数,(3) 提供……
立即学习“前端免费学习笔记(深入)”;
- 封装一个
startPolling函数,内部用async/await调用 API - 成功后判断是否继续:
if (data.status !== 'done') setTimeout(startPolling, 3000) - 同样用 ref 控制开关(如
isPolling),支持手动暂停/恢复 - 在
onUnmounted中置isPolling.value = false并确保递归终止
借助 `@vueuse/core` 的 useIntervalFn
推荐用于中大型项目,代码更简洁、健壮,自动绑定组件生命周期。
- 安装:
npm install @vueuse/core - 导入并使用:
const { pause, resume } = useIntervalFn(fetchData, 5000, { immediate: true }) -
immediate: true表示挂载即执行一次,省去手动初调 - 内置暂停/恢复能力,配合按钮控制轮询非常方便
- 组件卸载时自动清理,无需手写
onUnmounted
用 vue-request 的 useRequest 启用轮询
适合已有数据请求抽象、需要自动重试/缓存/loading 状态管理的业务场景。
- 安装:
npm install vue-request - 配置
pollingInterval即可开启轮询,pollingWhenHidden: false可停掉页面不可见时的请求 - 自动处理请求取消(如切换路由时)、错误重试、防抖节流等细节
- 返回
data、loading、run等响应式状态,模板中直接消费

















