Add debounce to tasq
This commit is contained in:
parent
359c6afd08
commit
803bbfa0fe
17
packages/tasq/src/debounce.test.ts
Normal file
17
packages/tasq/src/debounce.test.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import {debounce} from './debounce'
|
||||
|
||||
describe('debounce', () => {
|
||||
|
||||
it('executes only once', async () => {
|
||||
const add = jest.fn()
|
||||
const d = debounce(add, 0)
|
||||
d(1, 2)
|
||||
d(3, 4)
|
||||
d(5, 6)
|
||||
d(7, 8)
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 0))
|
||||
expect(add.mock.calls).toEqual([[ 7, 8 ]])
|
||||
})
|
||||
|
||||
})
|
||||
13
packages/tasq/src/debounce.ts
Normal file
13
packages/tasq/src/debounce.ts
Normal file
@ -0,0 +1,13 @@
|
||||
export function debounce<A, R>(fn: (...args: A[]) => R, delay: number) {
|
||||
let timeout: NodeJS.Timeout | null = null
|
||||
|
||||
return async function debounceImpl(...args: A[]) {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout)
|
||||
}
|
||||
|
||||
timeout = setTimeout(() => {
|
||||
fn(...args)
|
||||
}, delay)
|
||||
}
|
||||
}
|
||||
@ -1 +1 @@
|
||||
|
||||
export * from './debounce'
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user