如何在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() 中剩余的时间?
SharePoint 2013 使用 JavaScript 获取当前用户