如何获取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存储在公共数组中的某个位置,然后您可以检查这里提到的答案和包是否有用: