AlgoDaily Solution
1function throttle(func, waitTime) {
2 // Set isThrottling flag to false to start
3 // and savedArgs to null
4 let isThrottling = false,
5 savedArgs = null;
6 // Spread the arguments for .apply
7 return function (...args) {
8 // Return a wrapped function
9 // Flag preventing immediate execution
10 if (!isThrottling) {
11 // Actual initial function execution
12 func.apply(this, args);
13 // Flip flag to throttling state
14 isThrottling = true;
15 // Queue up timer to flip the flag so future iterations can occur
16 function queueTimer() {
17 setTimeout(() => {
18 // Stop throttling
19 isThrottling = false;
20 // Queueing up the next invocation after wait time passes
21 if (savedArgs) {
22 func.apply(this, savedArgs);
23 isThrottling = true;
24 savedArgs = null;
25 queueTimer();
26 }
27 }, waitTime);
28 }
29 queueTimer();
30 }
31 // Wait state until timeout is done
32 // Save arguments
33 else savedArgs = args;
34 };
35}
Community Solutions
Community solutions are only available for premium users.
Access all course materials today
The rest of this tutorial's contents are only available for premium members. Please explore your options at the link below.
xxxxxxxxxx
36
function throttle(func, waitTime) {
// Set isThrottling flag to false to start
// and savedArgs to null
let isThrottling = false,
savedArgs = null;
// Spread the arguments for .apply
return function (args) {
// Return a wrapped function
// Flag preventing immediate execution
if (!isThrottling) {
// Actual initial function execution
func.apply(this, args);
// Flip flag to throttling state
isThrottling = true;
// Queue up timer to flip the flag so future iterations can occur
function queueTimer() {
setTimeout(() => {
// Stop throttling
isThrottling = false;
// Queueing up the next invocation after wait time passes
if (savedArgs) {
func.apply(this, savedArgs);
isThrottling = true;
savedArgs = null;
queueTimer();
}
}, waitTime);
OUTPUT
Results will appear here.