我在不同的类中使用setTimeout()
函数创建了不同的定时器。我想知道是否有一种方法可以将所有的定时器一起获取?
我在不同的类中使用setTimeout()
函数创建了不同的定时器。我想知道是否有一种方法可以将所有的定时器一起获取?
// ES2015+ version
const activeTimers = [];
exports.setTimeout = (callback, interval, ...timerArgs) => {
const handle = setTimeout((...args) => {
const index = activeTimers.indexOf(handle);
if (index >= 0) {
activeTimers.splice(index, 1);
}
callback(...args);
}, interval, ...timerArgs);
activeTimers.push(handle);
};
exports.getActiveTimers = () => {
return activeTimers.slice();
};
如果可以的话,使用它自己的 setTimeout
而不是全局的。
没有API可以获取已注册的超时,但有一种“方法”可以实现您的目标。
创建一个新函数,让我们称其为registerTimeout
。确保它与setTimeout
具有相同的签名。在此函数中,跟踪您需要的内容(返回的计时器ID、回调函数、超时时间等)并使用setTimeout
进行注册。
现在您可以查询自己的数据结构以获取已注册的超时。
当然,您应该可能跟踪已过期/触发的超时以及已清除的超时...
setTimeout()
和setInterval()
函数会返回值,但你必须使用自己的代码来跟踪它们。 - Pointy