mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-12-28 03:13:14 +00:00
remove comments
This commit is contained in:
parent
7f48a38b72
commit
571b1faf70
|
@ -3,42 +3,22 @@ export function debounce<T extends any[], R>(
|
|||
wait = 1000,
|
||||
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;
|
||||
|
||||
// Calling debounce returns a new anonymous function
|
||||
return function () {
|
||||
// reference the context and args for the setTimeout function
|
||||
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;
|
||||
|
||||
// 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);
|
||||
|
||||
// Set the new timeout
|
||||
timeout = setTimeout(function () {
|
||||
// Inside the timeout function, clear the timeout variable
|
||||
// which will let the next execution run when in 'immediate' mode
|
||||
timeout = null;
|
||||
|
||||
// Check if the function already ran with the immediate flag
|
||||
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);
|
||||
}
|
||||
}, wait);
|
||||
|
||||
// Immediate mode and no wait timer? Execute the function..
|
||||
if (callNow) func.apply(this, args);
|
||||
} as (...e: T) => R;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue