Sunny-117 / js-challenges

✨✨✨ Challenge your JavaScript programming limits step by step

Home Page:https://juejin.cn/column/7244788137410560055

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

settimeout系统补偿时间

Sunny-117 opened this issue · comments

settimeout系统补偿时间
function _timerSetInterval(fn, delay, ...args) {
  let current = Date.now();
  let timer = null;

  const task = () => {
    current += delay;
    timer = setTimeout(() => {
      fn.apply(this, args);
      task();
    }, current - Date.now());
  };

  task();
  return () => clearTimeout(timer);
}
function mySettimeout(fn, time) {
  let start = new Date().getTime();
  let count = 1;
  fn();
  function instance() {
    let gap = time * count;
    let fact = new Date().getTime() - start;
    let diff = fact - gap;
    count++;
    fn();
    setTimeout(() => {
      instance();
    }, time - diff);
  }
  setTimeout(() => {
    instance();
  }, time);
}
mySettimeout(() => console.log(new Date()), 10000);