UNPKG

@lesnoypudge/utils

Version:

lesnoypudge's utils

47 lines (46 loc) 919 B
import { noop } from "../noop/noop.js"; const throttle = (fn, delayMS) => { let lastArgs; let isBlocked = false; let isCalledDuringBlock = false; let timeoutId; const block = (resolve = noop) => { isBlocked = true; timeoutId = setTimeout(() => { isBlocked = false; resolve(); if (isCalledDuringBlock) { fn(...lastArgs); block(); } }, delayMS); }; const reset = () => { clearTimeout(timeoutId); isBlocked = false; isCalledDuringBlock = false; }; const wrappedFunc = (...args) => { return new Promise((resolve) => { if (!isBlocked) { fn(...args); block(resolve); return; } isCalledDuringBlock = true; lastArgs = args; }); }; const controls = { block, reset }; return [ wrappedFunc, controls ]; }; export { throttle }; //# sourceMappingURL=throttle.js.map