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

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

【问题讨论】:

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

标签: javascript node.js settimeout


【解决方案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 注册。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2014-04-29
      • 2014-05-02
      相关资源
      最近更新 更多