2805. 自定义间隔
2025年6月25日小于 1 分钟
2805. 自定义间隔
type IntervalFn = () => void
interface CustomIntervalMap {
[id: number]: boolean
}
// 用于存储每个定时器的“取消”状态
const intervalMap: CustomIntervalMap = {}
let uid = 0
/**
* 模拟 setInterval,支持 clear
* @param fn 执行的函数
* @param delay 首次延迟
* @param period 周期间隔
* @returns id 可用于 clear
*/
function customInterval(fn: IntervalFn, delay: number, period: number): number {
const id = ++uid
intervalMap[id] = false
let count = 0
const cb = () => {
if (intervalMap[id]) return // 被 clear 掉
fn()
setTimeout(cb, count++ * period + delay)
}
setTimeout(cb, count++ * period + delay)
return id
}
/**
* 清除定时器
* @param id 定时器 id
*/
function customClearInterval(id: number): void {
intervalMap[id] = true
}