[英]Using clearInterval within a function to clear a setInterval on another function
我认为我在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方法的对象。 有关示例,请参见本文: http : //www.w3schools.com/jsref/met_win_cleartimeout.asp
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.