如何通过ID获取间隔或超时

问题描述

我想通过其ID获取间隔或超时的数据。 就像document.getElementById('id-of-random-element')获取该特定元素上的所有数据一样,我想知道是否有任何方法可以获取最初通过其ID为超时或间隔设置的数据。

例如:

var a = setInterval(()=>{console.log("abcdef");},1000)
//below is some serIoUs pseudo code
getIntervalById(a) //returns something like (()=>{console.log("abcdef");},1000)

解决方法

您可能会考虑的一件事是使计时器过载,以便您可以拦截它们并存储所需的任何内容

带有setTimeout的简单示例

const origTime = window.setTimeout;

setTimeout = function(...args) {
  const id = origTime(...args);
  // do something with arguments and id
  console.log('id:',id,'delay:',args[1]);
  return id
}

let id = setTimeout(() => console.log('wtf'),1000);
setTimeout(() => console.log('foobar'),2000)

console.log('external id',id)

,

扩展其他答案

var inters = []
Object.defineProperties(window,{
    getAllIntervals: {
        get: function () {
            return inters
        }
    }
})
var old= setInterval
setInterval = function () {
   var oldId= old.apply(this,arguments)
   inters[oldId] = arguments//[fnc,time]
}

然后,只要您可以设置setInterval,便可以稍后调用getAllIntervals以获取由lidz映射的间隔列表,并使用.toString()分析函数,或使用getAllIntervals[INTERVAL_ID]

获取特定间隔。