GIST

Debounce utility

#typescript (1)#utils (1)

Delays execution until a quiet period has elapsed.

debounce.test.tsCopied!16 lines · 395 B
import { describe, it, expect, vi } from 'vitest'
import { debounce } from './debounce'
describe('debounce', () => {
it('delays the callback', () => {
vi.useFakeTimers()
const fn = vi.fn()
const debounced = debounce(fn, 100)
debounced()
expect(fn).not.toHaveBeenCalled()
vi.advanceTimersByTime(100)
expect(fn).toHaveBeenCalledOnce()
vi.useRealTimers()
})
})
debounce.tsCopied!11 lines · 270 B
export function debounce<T extends (...args: unknown[]) => void>(
fn: T,
ms: number,
): (...args: Parameters<T>) => void {
let timer: ReturnType<typeof setTimeout>
return (...args) => {
clearTimeout(timer)
timer = setTimeout(() => fn(...args), ms)
}
}