froebel
Version:
TypeScript utility library
23 lines (22 loc) • 664 B
JavaScript
export const cancel = Symbol("debounce.cancel");
/**
* Creates a debounced function that delays invoking `fun` until `ms` milliseconds
* have passed since the last invocation of the debounced function.
*
* `fun` is invoked with the last arguments passed to the debounced function.
*
* Calling `[debounce.cancel]()` on the debounced function will cancel the currently
* scheduled invocation.
*/
const debounce = Object.assign((fun, ms) => {
let toId;
return Object.assign((...args) => {
clearTimeout(toId);
toId = setTimeout(() => fun(...args), ms);
}, {
[cancel]: () => clearTimeout(toId)
});
}, {
cancel
});
export default debounce;