安全清除JavaScript超时

安全清除JavaScript超时,javascript,timer,Javascript,Timer,我创建了一个JavaScript函数,它执行以下操作: function myFunction() { DoStuff; watch = setTimeout(myFunction, 1000); } 在哪里 是一个全局变量,最初设置为null 然后,我有第二个函数,可以随时调用,形式如下: function mySecond() { DoStuff; clearTimeout(watch); } 现在,有时会发生这样的情况,尽管第二个函数被调用,超时被清除,

我创建了一个JavaScript函数,它执行以下操作:

function myFunction() {
    DoStuff;
    watch = setTimeout(myFunction, 1000);
}
在哪里

是一个全局变量,最初设置为null

然后,我有第二个函数,可以随时调用,形式如下:

function mySecond() {
    DoStuff;
    clearTimeout(watch);
}
现在,有时会发生这样的情况,尽管第二个函数被调用,超时被清除,但第一个函数会在另一个时间被调用。我猜这是因为当第二个函数被调用时,第一个函数的请求已经被发送,因此计时器在另一个时间工作,并且不断地调用自己。。。我想指出的是,这种情况并不总是发生,我想这取决于你可能遇到的特定时间条件


如何安全地消除再次调用第一个函数的所有可能性?

此代码的问题是
监视
仅保留最后一个超时。这应该可以解决它

function myFunction() {
      DoStuff;
      if (watch) { clearTimeout(watch); }
      watch = setTimeout(myFunction, 1000);
}

这听起来更像是你需要清理你的设计,这样你就可以确切地知道谁在调用什么,在什么情况下调用,而不是通过破解你的代码来控制你并不真正理解的东西。我建议在
myFunction()
中设置一个断点,看看到底是谁在调用它,把你弄得一团糟,然后修复调用者。我的问题中引用了相关函数。我完全理解我的代码,没有其他人在与它们交互。那么当你不想调用它时,
myFunction()
怎么会被调用呢?您公开的代码中从来没有调用过它。这里的操作代码是调用
myFunction()
的代码。这显然是需要解决的问题。通过清晰、结构化的设计,充分理解所有可能的呼叫序列,解决了定时问题。
function myFunction() {
      DoStuff;
      if (watch) { clearTimeout(watch); }
      watch = setTimeout(myFunction, 1000);
}