清除嵌套在另一个 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/