首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clearInterval逻辑问题

clearInterval逻辑问题
EN

Stack Overflow用户
提问于 2015-07-21 02:52:47
回答 2查看 43关注 0票数 0

我在清除我使用的逻辑中的间隔时遇到了问题。clearInterval并没有像我想象的那样工作。关于如何将我的logiuc合并到下面,以便clearInterval可以工作,有什么建议吗?toggleInterval在更改时被调用。

代码语言:javascript
复制
var interval;
function toggleInterval(setting, interval) {
      switch (setting) {
          case SET_INTERVAL: 
            interval = setInterval(function() {
                poll(true, interval);
            }, 5000);  
            break;
        case CLEAR_INTERVAL:
            clearInterval(interval);
            break;    
    }   
}   


function poll(polled, interval) {
    if (!polled) {
        $pollPromise = $.ajax({
            url: '/stuff/',
        }); 

        $pollPromise.done(success);
        function success(data) {
            if (data.success) {
                // .... DO stuff
                toggleInterval(CLEAR_INTERVAL, interval);
            }   
            return;
        } 
    }   
}   
EN

回答 2

Stack Overflow用户

发布于 2015-07-21 02:57:45

当调用ever set interval时,您正在创建一个要轮询的新间隔。您需要先清除间隔,然后创建新的间隔。

代码语言:javascript
复制
case SET_INTERVAL: 
            interval = setInterval(function() {
                poll(true, interval);
            }, 5000);  
            break;

应更改为

代码语言:javascript
复制
case SET_INTERVAL: 
            clearInterval(interval);   <-----
            interval = setInterval(function() {
                poll(true, interval);
            }, 5000);  
            break;
票数 1
EN

Stack Overflow用户

发布于 2015-07-21 03:01:44

实际上,您并没有将setInterval()值存储在任何地方。

您的interval参数(一个局部变量)隐藏了var interval;声明,因此一旦toggleInterval()退出,该值就会丢失。返回值,以便调用者可以使用它来设置全局变量:

代码语言:javascript
复制
var interval;

function toggleInterval(setting, interval) {
      switch (setting) {
          case SET_INTERVAL: 
            return setInterval(function() {
                poll(true, interval);
            }, 5000);  

        case CLEAR_INTERVAL:
            clearInterval(interval);
            break;    
    }   
}       

function poll(polled, interval) {
    if (!polled) {
        $pollPromise = $.ajax({
            url: '/stuff/',
        }); 

        $pollPromise.done(success);
        function success(data) {
            if (data.success) {
                // .... DO stuff
                toggleInterval(CLEAR_INTERVAL, interval);
                interval = null;
            }   
            return;
        } 
    }   
}   

// elsewhere:
interval = toggleInterval(SET_INTERVAL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31524185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档