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