javascript - 清除嵌套的 setInterval?

标签 javascript setinterval clearinterval

清除嵌套在另一个 setInterval 中的 setInterval 时遇到一些问题。

polling 被清除得很好,但 marque (全局设置)即使清除在控制台中多次吐出,也会继续触发。

listener: function() {
    var polling;

    journalScroll.on('scrollEnd', function() {
        clearInterval(polling);
        Roots.common.journal.scroll.status();
        console.log('scrollend');
    });

    journalScroll.on('scrollStart', function() {
      polling = setInterval(Roots.common.journal.scroll.status, 1250); // Time in milliseconds
      console.log('scrollstart');
    });
},

status: function() {
  console.log('scroll status');

  if((journalScroll.y*-1) < $(window).height() * 3) {
    console.log('setinterval');
    marque = setInterval(function() {
      Roots.common.journal.scroll.marque();
    }, 50);
  } else {
    clearInterval(marque);
    console.log('cleared');
  }
},

marque: function() {
  console.log('polling marque');        
},

最佳答案

setInterval 仅返回一个 ID(整数),并尝试无限期地运行计时器,直到您将相同的 ID 传递回 clearInterval 函数。由于事件异步功能的相对不可预测性,调用和回调通常会导致 race conditions .

例如,您的代码可能会创建一个新的间隔,并在旧间隔被清除之前为 marque 变量分配一个不同的 ID - 这会导致它被“孤立”,因为它仍然是正在运行,但您没有可以用来取消它的 ID。

在看不到所有代码的情况下,“修复”问题的最简单方法是在 status 中 setInterval 之前盲目地 clearInterval(marque); 函数 - 确保在这种情况下,在任何时间点只有一个间隔处于事件状态。

关于javascript - 清除嵌套的 setInterval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479802/

相关文章:

javascript - AngularJS http get 与 settimeout 逻辑

javascript - 将 clearInterval 停止排队间隔执行

javascript - 编辑文本 Textarea Jquery

javascript - 需要帮助改善扑克牌悬停效果

javascript - Highcharts Column w/drilldown 在 Rails 4 中不起作用

javascript - 由于其他代码在间隔之间运行,setInterval 函数的间隔不均匀;

javascript - 设置超时或设置间隔?

Javascript clearInterval 不清除

javascript - D3,具有 setInterval 和clearInterval 以及事件处理程序的 javascript 函数范围

javascript - 根据下拉菜单和图像链接更改图像