javascript - 从不同地方取消setInterval(NodeJS变量范围)

标签 javascript node.js scope

我正在设置一个全局变量,然后使用可以从模块中其他位置调用的函数在其中存储 setInterval。我还设置了一个取消 setInterval 的函数,该函数可用于取消模块内其他函数的 setInterval。请参阅下面的片段:

var availabilityCheckInterval

function repeatAvailabilityCheckStart (session) {
  availabilityCheckInterval = setInterval(() => {
    // Call an API
    if (successful) {
      repeatAvailabilityCheckStop()
    }
  }, 15000)
}

function repeatAvailabilityCheckStop () {
  clearInterval(availabilityCheckInterval)
}

这在我的本地计算机和临时环境上运行,但在并发用户的生产中似乎失败(或者可能从未真正起作用......)。

我在这里遗漏了与变量范围相关的内容吗?我在具有并发用户的生产环境中使用 setInterval() 太天真了?

最佳答案

当我在评论中说“将其包装在一个对象中”时,我的意思是这样的:

class Interval {
  constructor (f, n) {
    this.fn = f;
    this.repeatInterval = n;
    this.handle = null;
  }

  get running () {
    return this.handle !== null;
  }

  run (...args) {
    if (!this.running) {
      this.handle = setInterval(this.fn, this.repeatInterval, ...args);
    } else {
      // optionally throw, display msg, whatever
    }
    return this;
  }

  stop () {
    clearInterval(this.handle);
    this.handle = null;
    return this;
  }
}

现在您可以拥有每个请求句柄/间隔。对每个请求只需执行

let intvl = new Interval(someFn, 15000).run();

并清理:

intvl.stop();

关于javascript - 从不同地方取消setInterval(NodeJS变量范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346261/

相关文章:

javascript - 在 knockout 中应用多个扩展器

javascript - 如果变量从未使用过,它会自动从内存中释放吗?

caching - 构建集合缓存是一个好习惯吗?

node.js - Node js 中的 stub require

javascript - 使用多个下拉列表选择的 URL 查询字符串(最好是 PHP?)

javascript - 如何禁用客户端脚本 block 服务器端 (asp.net)

node.js - 如何删除nodejs中对index.html的偏好?

c++ - "Typedef redefinition with different types"工作 MSVC 代码中的 Clang 错误

javascript - PhantomJS:如何访问全局函数和变量?

Haskell 不在范围内 : Type constructor or class `PushInt'