Skip to content

Poll

Poll用于创建一个轮询工具实例。通过 init() 开始轮询,destroy() 停止轮询。

语法

javascript
const poll = new Poll()
poll.func = () => {}
poll.freq = 1000
poll.init()
poll.destroy()

实例属性

  • func Function

  轮询时执行的回调函数,默认为空函数 () => {}

  • freq number

  轮询间隔时间,单位 ms,默认 1000

  • timer number|null

  内部 setInterval 返回的定时器 id,未启动时为 null。建议不要外部直接修改。

实例方法

  • init() void

  启动轮询。会立即同步执行一次 func,然后按 freq 间隔循环执行。若已启动(timer 存在)则忽略重复调用。

  • destroy() void

  销毁轮询。调用 clearInterval 清除定时器并重置 timernull,停止后续执行。

描述

Poll 通过 setInterval 实现周期性调用。init() 内部会先同步执行一次 func,避免等待第一个 freq 周期;同时设置 timer 标志,防止重复 init。destroy() 用于显式停止轮询并清理资源。

适用于需要持续轮询服务器状态、检查任务进度、定时刷新数据等场景。

注意事项

  • 依赖运行环境的定时器 API(setInterval / clearInterval),在 web 与 node 之外的 JS 环境可能无法工作。
  • init() 之前应设置好 funcfreq,否则 func 默认为空函数,freq 默认为 1000ms。
  • destroy() 后若需再次启动,可直接调用 init()
  • 实例销毁或页面/组件卸载时务必调用 destroy(),避免内存泄漏。
  • func 内若为异步操作,需自行处理执行时长大于 freq 时的堆叠问题。

示例

基础用法

销毁轮询

浏览器兼容

依赖定时器API

Poll 基于 setIntervalclearInterval。 定时器并非 ES 本身规范,依赖运行环境。 在 web 与 node 之外的 JS 环境可能无法工作。

性能考虑

  • setInterval 触发频率受事件循环影响,实际间隔不会短于 freq,但可能略长。
  • func 执行时间超过 freq,多次回调可能堆积,建议在 func 内部做耗时控制或采用递归 setTimeout 方案替代。
  • 轮询间隔越小,CPU 占用越高,应根据业务合理设置 freq

相关函数