Poll
Poll类用于创建一个轮询工具实例。通过 init() 开始轮询,destroy() 停止轮询。
语法
javascript
const poll = new Poll()
poll.func = () => {}
poll.freq = 1000
poll.init()
poll.destroy()实例属性
funcFunction
轮询时执行的回调函数,默认为空函数 () => {}。
freqnumber
轮询间隔时间,单位 ms,默认 1000。
timernumber|null
内部 setInterval 返回的定时器 id,未启动时为 null。建议不要外部直接修改。
实例方法
init()void
启动轮询。会立即同步执行一次 func,然后按 freq 间隔循环执行。若已启动(timer 存在)则忽略重复调用。
destroy()void
销毁轮询。调用 clearInterval 清除定时器并重置 timer 为 null,停止后续执行。
描述
Poll 通过 setInterval 实现周期性调用。init() 内部会先同步执行一次 func,避免等待第一个 freq 周期;同时设置 timer 标志,防止重复 init。destroy() 用于显式停止轮询并清理资源。
适用于需要持续轮询服务器状态、检查任务进度、定时刷新数据等场景。
注意事项
- 依赖运行环境的定时器 API(
setInterval/clearInterval),在 web 与 node 之外的 JS 环境可能无法工作。 - 在
init()之前应设置好func和freq,否则func默认为空函数,freq默认为 1000ms。 destroy()后若需再次启动,可直接调用init()。- 实例销毁或页面/组件卸载时务必调用
destroy(),避免内存泄漏。 func内若为异步操作,需自行处理执行时长大于freq时的堆叠问题。
示例
基础用法
销毁轮询
浏览器兼容
依赖定时器API
Poll 基于 setInterval 与 clearInterval。 定时器并非 ES 本身规范,依赖运行环境。 在 web 与 node 之外的 JS 环境可能无法工作。
性能考虑
setInterval触发频率受事件循环影响,实际间隔不会短于freq,但可能略长。- 若
func执行时间超过freq,多次回调可能堆积,建议在func内部做耗时控制或采用递归setTimeout方案替代。 - 轮询间隔越小,CPU 占用越高,应根据业务合理设置
freq。
相关函数
- waitMS - 固定毫秒等待
- waitValue - 等待条件成立
- throttleAsync / debounceAsync - 节流与防抖
- lazyChange - 惰性赋值代理