问题描述
我想通过其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]