Javascript 在函数内使用clearInterval清除另一个函数上的setInterval
我认为我在clearInterval方法的工作原理上遗漏了一些相当明显的东西 下面的代码就是这样。我希望第一个函数调用执行testFunction,并设置重复该函数的间隔。第二个调用将执行第二个函数,该函数将从第一个函数中删除间隔。由于这将在5000ms间隔之前执行,因此不会再次执行第一个函数。然而,它的行为并非如此 有人能解释一下我的方法有什么问题吗 原因是在我正在编写的程序中,我使用setTimeout每隔30秒左右发出一次重复的get请求,但我希望有一种方法可以轻松地在程序的其他点删除此间隔Javascript 在函数内使用clearInterval清除另一个函数上的setInterval,javascript,settimeout,intervals,Javascript,Settimeout,Intervals,我认为我在clearInterval方法的工作原理上遗漏了一些相当明显的东西 下面的代码就是这样。我希望第一个函数调用执行testFunction,并设置重复该函数的间隔。第二个调用将执行第二个函数,该函数将从第一个函数中删除间隔。由于这将在5000ms间隔之前执行,因此不会再次执行第一个函数。然而,它的行为并非如此 有人能解释一下我的方法有什么问题吗 原因是在我正在编写的程序中,我使用setTimeout每隔30秒左右发出一次重复的get请求,但我希望有一种方法可以轻松地在程序的其他点删除此间
function testFunction() {
$("#test").append("test");
setTimeout(testFunction, 5000);
}
function stopFunction() {
clearTimeout(testFunction);
}
testFunction();
stopFunction();
setTimeout返回一个ID,因此您应该
var timeoutID = setTimeout(blah blah);
clearTimeout(timeoutID);
setTimeout返回需要传递到clearTimeout方法的对象。有关示例,请参阅本文:
setTimeout
返回计时器的标识符。将其存储在变量中,如:
var timeout;
function testFunction(){
...
timeout = setTimeout(testFunction, 5000);
}
function stopFunction(){
clearTimeout(timeout);
}
这里是一个简单的,我认为更好的实现
var _timer = null,
_interval = 5000,
inProgress = false,
failures = 0,
MAX_FAILURES = 3;
function _update() {
// do request here, call _onResolve if no errors , and _onReject if errors
}
function _start() {
inProgress = true;
_update();
_timer = setInterval(_update, _interval);
}
function _end() {
inProgress = false;
clearInterval(_timer);
}
function _onReject(err) {
if (failures >= MAX_FAILURES) {
_end();
return false;
}
_end();
failures++;
_start();
}
function _onResolve(response) {
return true;
}
阅读
clearTimeout
的文档。它不使用函数,而是使用计时器的标识符-与setTimeout
返回的标识符相同,但您只是随意放弃,而不将其保存到变量中<代码>定时器=设置超时(doSomething,time);清除超时(计时器)代码>.ahhhh。这很有道理,非常感谢您。如果您执行http请求,您也需要考虑http错误。