@lesnoypudge/utils
Version:
lesnoypudge's utils
47 lines (46 loc) • 919 B
JavaScript
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