javascript - 清除间隔逻辑问题

标签 javascript ajax

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

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;
        } 
    }   
}   

最佳答案

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

case SET_INTERVAL: 
            interval = setInterval(function() {
                poll(true, interval);
            }, 5000);  
            break;

应该改为

case SET_INTERVAL: 
            clearInterval(interval);   <-----
            interval = setInterval(function() {
                poll(true, interval);
            }, 5000);  
            break;

关于javascript - 清除间隔逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524185/

相关文章:

php - 加载外部 php 页面

javascript - 使用 AJAX 加载 GZIP JSON 文件

javascript - 使用 Javascript 闭包将附加数据传递给 API 回调函数

javascript - 使用 AngularJS 方法绑定(bind)防止重复调用

javascript - Chrome 无法识别 Access-Control-Allow-Origin

ruby-on-rails - 如何使用 rack-mini-profiler 进行 ajax 调用?

javascript - 从最后一个逗号开始从字符串中删除所有字符

javascript - 为什么javascript在迭代时将数组索引转为字符串?

javascript - Kendo Grid 可编辑弹出窗口是否有某种 IsChanged 事件?

ajax - 下载需要身份验证 token 的文件