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

How to get interval or timeout by ID

我想通过它的ID获取一个interval或者timeout的数据。 就像 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]
}

然后,只要你可以设置间隔,你就可以稍后调用 getAllIntervals 来获取我们 lidz 映射的间隔列表,并使用 .toString() 分析函数,或者使用 getAllIntervals[INTERVAL_ID][=12= 获取特定间隔]