Skip to content

timer

定时器工具,提供可暂停/恢复的间隔定时器。

导入

typescript
import {
  makeInterval,
  timeInterval,
  type TimerState,
  type TimerHandler,
  type TimerOptions,
} from '@cloudcome/utils-core/timer'

类型定义

TimerState

定时器状态。

typescript
type TimerState = {
  times: number
  startAt: number
  stopAt: number
  pauseAt: number
  resumeAt: number
  currentAt: number
  elapsedTime: number
  runningTime: number
  intervalTime: number
}

属性说明

属性类型描述
timesnumber执行次数
startAtnumber开始时间戳
stopAtnumber停止时间戳
pauseAtnumber暂停时间戳
resumeAtnumber恢复时间戳
currentAtnumber当前时间戳
elapsedTimenumber总耗时(包括暂停时间)
runningTimenumber实际运行时间(不包括暂停时间)
intervalTimenumber当前间隔时间

TimerHandler

定时器控制句柄。

typescript
type TimerHandler = {
  start: () => void
  pause: () => void
  resume: (immediate?: boolean) => void
  stop: () => void
}

TimerOptions

定时器配置选项。

typescript
type TimerOptions = {
  leading?: boolean
  trailing?: boolean
}

属性说明

属性类型默认值描述
leadingbooleanfalse是否在定时器开始时立即执行回调
trailingbooleanfalse是否在定时器停止时执行最后一次回调

函数

makeInterval

创建间隔定时器核心函数,可自定义调度方式。

typescript
function makeInterval(
  nextTime: (call: () => void) => void,
  effect: (timer: TimerState, next?: () => void) => unknown,
): {
  canStart: () => boolean
  canStop: () => boolean
  canPause: () => boolean
  canResume: () => boolean
  start: () => void
  stop: () => void
  pause: () => void
  resume: () => void
  execute: () => void
}

参数

参数类型描述
nextTime(call: () => void) => void用于安排下一次执行的函数
effect(timer: TimerState, next?: () => void) => unknown每次执行的回调函数,接收定时器状态和可选的 next 函数

返回值

返回包含控制方法的对象,包括 canStartcanStopcanPausecanResume 状态查询方法和 startstoppauseresumeexecute 控制方法。

示例

typescript
const interval = makeInterval(
  (call) => setTimeout(call, 1000),
  (state) => {
    console.log(`第 ${state.times} 次执行,已运行 ${state.runningTime}ms`)
  }
)

interval.start()
// 1 秒后: 第 1 次执行,已运行 1000ms
// 2 秒后: 第 2 次执行,已运行 2000ms

interval.pause()  // 暂停
interval.resume() // 恢复
interval.stop()   // 停止

timeInterval

创建一个基于 setTimeout 的间隔定时器。

typescript
function timeInterval(
  callback: (state: TimerState, next?: () => void) => unknown,
  interval: number,
  options?: TimerOptions,
): TimerHandler

参数

参数类型描述
callback(state: TimerState, next?: () => void) => unknown每次间隔执行的回调函数
intervalnumber间隔时间(毫秒)
optionsTimerOptions可选,配置选项

返回值

TimerHandler - 定时器控制句柄

示例

typescript
const timer = timeInterval(
  (state) => {
    console.log(`第 ${state.times} 次执行`)
  },
  1000,
  { leading: true }
)

timer.start()  // 立即执行第一次,之后每 1 秒执行
timer.pause()  // 暂停
timer.resume() // 恢复
timer.stop()   // 停止

基于 MIT 许可发布