清除嵌套在另一个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');
},
答案 0 :(得分:2)
setInterval
只返回一个ID(整数),并将尝试无限期地运行一个计时器,直到您将相同的ID传递回clearInterval
函数。由于 事件 和 异步 功能的相对不可预测性,调用和回调通常会导致{{3 }}
例如,您的代码可能正在创建一个新的时间间隔,并在清除旧时间间隔之前为marque
变量分配不同的ID - 这会导致它成为“孤儿”#34;因为它仍在运行,你没有ID可以取消它。
没有看到你的所有代码都是最简单的方法来修复&#34;问题是在clearInterval(marque);
函数setInterval
之前盲目status
- 确保在这种情况下,任何时间点只有一个时间间隔有效。