繁体   English   中英

在函数内使用clearInterval清除另一个函数上的setInterval

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM