remove comments

This commit is contained in:
Alec Armbruster 2023-06-17 08:46:19 -04:00
parent 7f48a38b72
commit 571b1faf70
No known key found for this signature in database
GPG key ID: 0BE3206ADE0F3B3B

View file

@ -3,42 +3,22 @@ export function debounce<T extends any[], R>(
wait = 1000, wait = 1000,
immediate = false immediate = false
) { ) {
// 'private' variable for instance
// The returned function will be able to reference this due to closure.
// Each call to the returned function will share this common timer.
let timeout: NodeJS.Timeout | null; let timeout: NodeJS.Timeout | null;
// Calling debounce returns a new anonymous function
return function () { return function () {
// reference the context and args for the setTimeout function
const args = arguments; const args = arguments;
// Should the function be called now? If immediate is true
// and not already in a timeout then the answer is: Yes
const callNow = immediate && !timeout; const callNow = immediate && !timeout;
// This is the basic debounce behavior where you can call this
// function several times, but it will only execute once
// [before or after imposing a delay].
// Each time the returned function is called, the timer starts over.
clearTimeout(timeout ?? undefined); clearTimeout(timeout ?? undefined);
// Set the new timeout
timeout = setTimeout(function () { timeout = setTimeout(function () {
// Inside the timeout function, clear the timeout variable
// which will let the next execution run when in 'immediate' mode
timeout = null; timeout = null;
// Check if the function already ran with the immediate flag
if (!immediate) { if (!immediate) {
// Call the original function with apply
// apply lets you define the 'this' object as well as the arguments
// (both captured before setTimeout)
func.apply(this, args); func.apply(this, args);
} }
}, wait); }, wait);
// Immediate mode and no wait timer? Execute the function..
if (callNow) func.apply(this, args); if (callNow) func.apply(this, args);
} as (...e: T) => R; } as (...e: T) => R;
} }