Skip to content

Latest commit

 

History

History
53 lines (37 loc) · 1.06 KB

28.implement-clearAllTimeout.md

File metadata and controls

53 lines (37 loc) · 1.06 KB

28. implement clearAllTimeout()

Problem

https://bigfrontend.dev/problem/implement-clearAllTimeout

Problem Description

window.setTimeout() could be used to schedule some task in the future.

Could you implement clearAllTimeout() to clear all the timers? This might be useful when we want to clear things up before page transition.

For example

setTimeout(func1, 10000);
setTimeout(func2, 10000);
setTimeout(func3, 10000);
// all 3 functions are scheduled 10 seconds later

clearAllTimeout();
// all scheduled tasks are cancelled.

note

You need to keep the interface of window.setTimeout and window.clearTimeout the same, but you could replace them with new logic

Solution

const timerCache = new Set();
const originalSetTimeout = window.setTimeout;

window.setTimeout = (cb, delay) => {
  const timer = originalSetTimeout(cb, delay);
  timerCache.add(timer);
  return timer;
};

/**
 * cancel all timer from window.setTimeout
 */
function clearAllTimeout() {
  for (const timer of timerCache) {
    clearTimeout(timer);
  }
}