如何获取javascript中的所有计时器?
我在不同的类中使用如何获取javascript中的所有计时器?,javascript,node.js,settimeout,Javascript,Node.js,Settimeout,我在不同的类中使用setTimeout()函数创建不同的计时器。我想知道是否有一种方法可以将所有的超时信息汇总在一起?默认情况下没有。您可以制作自己的模块,用于跟踪计时器,并提供列表大致上: // ES2015+ version const activeTimers = []; exports.setTimeout = (callback, interval, ...timerArgs) => { const handle = setTimeout((...args) =>
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();
};
…然后使用它的
设置超时
而不是全局设置。没有API可以获取注册超时,但有一种“方法”可以实现您的目标
创建一个新函数,让我们调用它registerTimeout
。确保其签名与setTimeout
相同。在此函数中,跟踪所需内容(返回的计时器id、回调函数、超时时间…),并使用setTimeout
进行注册
现在,您可以查询自己的数据结构以查找已注册的超时
当然,您可能应该跟踪过期/触发的超时以及清除的超时…您不能这样做。
setTimeout()
和setInterval()
函数返回值,但您必须用自己的代码跟踪它们。使用setTimeout()的静态实现如何?这可以从所有类调用,也可以跟踪调用。您必须将返回id存储在公共数组中的某个位置,然后您可以检查这里提到的答案和包是否有用: