如何在javascript中获取所有计时器?

Posted

技术标签:

【中文标题】如何在javascript中获取所有计时器?【英文标题】:How can I get all timers in javascript? 【发布时间】:2018-02-11 08:01:59 【问题描述】:

我在不同的类中使用setTimeout() 函数创建不同的计时器。我想知道是否有办法将所有超时放在一起?

【问题讨论】:

你不能那样做。 setTimeout()setInterval() 函数返回值,但您必须使用自己的代码跟踪它们。 使用 setTimeOut() 的静态实现怎么样?可以从所有类调用它,也可以跟踪调用。 您必须将返回 id 存储在公共数组中的某处,然后您可以检查 您可能会发现这里提到的答案和软件包很有用:***.com/q/26057328/3412775 【参考方案1】:

默认情况下不是,不是。您可以制作自己的模块,让您跟踪计时器,并为您提供列表。 大概

// 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 而不是全局的。

【讨论】:

【参考方案2】:

没有获取注册超时的 API,但有一种“方法”可以实现您的目标。

创建一个新函数,我们称之为registerTimeout。确保它与setTimeout 具有相同的签名。在此函数中,跟踪您需要的内容(返回的计时器 ID、回调函数、超时时间...)使用setTimeout 注册。

现在您可以查询自己的数据结构以获取已注册的超时。

当然,您可能应该跟踪过期/触发的超时以及清除的超时...

【讨论】:

以上是关于如何在javascript中获取所有计时器?的主要内容,如果未能解决你的问题,请参考以下文章

如何能获取javaScript setTimeout() 中剩余的时间?

使用 JavaScript 创建一个兔年春节倒数计时器

SharePoint 2013 使用 JavaScript 获取当前用户

当手指在屏幕上而不抬起时,javascript动画在ios safari webkit浏览器中停止

Javascript暂停计时器困境......无法计算它

如何在 JavaScript 中编写倒数计时器? [关闭]