Polyfill of setInterval

const createSetInterval = () => {
  let intervalId = 1;
  let intervalMap = {};

  const setIntervalPolyfill = (callback, delay, ...args) => {
    let id = intervalId++;
    function reIterate() {
      intervalMap[id] = setTimeout(() => {
        callback.apply(this, args);
        if (intervalMap[id]) {
          reIterate();
        }
      }, delay);
    }
    reIterate();
    return id;
  };

  const clearSetInterval = (id) => {
    delete intervalMap[id];
  };

  return { setIntervalPolyfill, clearSetInterval };
};

const { setIntervalPolyfill, clearSetInterval } = createSetInterval();

let counter = 0
let id = setIntervalPolyfill(
  (name) => {
    console.log(name);
    console.log("Interval Running");
    counter++
    if(counter === 3) {
        clearSetInterval(id)
    }
  },
  1000,
  "Arjunan K"
);