2014-10-04 39 views
0

我创建了一个JavaScript函数,执行以下操作:安全清晰的JavaScript超时

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

其中

watch 

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

然后,我有第二个功能,即可以在任何时刻被称为形式,:

function mySecond() { 
    DoStuff; 
    clearTimeout(watch); 
} 

现在,它有时会出现这种情况,虽然第二个函数被调用,超时以某种方式清除,第一个功能被称为另一次。我想这是因为当第二个函数被调用时,第一个函数的请求已经被发送,并且因此该计时器再次工作,并且一直不停地调用自己...我想指出这个并不总是发生,我想这取决于你可能遇到的具体时间条件。

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

+1

像你需要清理你的设计,让你知道究竟是谁喊什么,在什么情况下,而不是破解您的代码来控制一些你不真正了解这听起来多。我建议在'myFunction()'中设置一个断点,然后看看究竟是谁在调用它并将你搞砸并修复调用者。 – jfriend00 2014-10-04 19:33:14

+0

涉及的功能是我的问题中引用的功能。我完全理解我的代码,没有其他人与他们互动。 – Eleanore 2014-10-04 19:37:43

+1

那么当你不想要的时候'myFunction()'是如何被调用的?你没有透露过的代码是永远的。这里的操作代码是调用'myFunction()'的代码。这显然是需要解决的问题。定时问题通过清晰和结构化的设计加以全面了解所有可能的调用序列。 – jfriend00 2014-10-04 19:39:57

回答

2

此代码的问题是watch仅保留上次超时。这应该修复它

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