如何交替设置setInterval的执行间隔时长?
如何交替使用两种不同的间隔时长执行函数?
我希望调用setInterval(或类似方法)时,能够交替使用两种不同的间隔时长。例如,先等待5秒执行函数,接着等待1秒执行,再等待5秒,以此循环往复。请问这是否可行?我尝试了一个交替修改间隔值的函数,但似乎没有效果,相关代码如下:
let num = 5000 function alternateNum() { if (num === 5000) { num = 1000 } else { num = 5000 } } setInterval(() => { // ... alternateNum() }, num);
问题原因
你的代码无效是因为setInterval一旦创建,就会固定使用初始化时传入的间隔时长,后续修改num变量不会改变这个已存在的定时器的执行间隔——它会一直以最初的5000ms循环执行。
可行实现方案
要实现交替间隔的效果,用setTimeout递归调用是更合适的方式,每次执行完任务后切换下一次的延迟时长:
方案一:用数组存储间隔并切换索引
// 定义交替的两个间隔 const intervals = [5000, 1000]; let currentIndex = 0; function executeTask() { // 这里编写你需要执行的任务逻辑 console.log('任务执行'); // 切换到下一个间隔的索引 currentIndex = 1 - currentIndex; // 递归设置下一次定时器 setTimeout(executeTask, intervals[currentIndex]); } // 启动第一次执行(先等待5秒) setTimeout(executeTask, intervals[currentIndex]);
方案二:直接切换延迟值
let nextDelay = 5000; function executeTask() { // 执行任务逻辑 console.log('任务执行'); // 交替切换延迟时长 nextDelay = nextDelay === 5000 ? 1000 : 5000; setTimeout(executeTask, nextDelay); } // 启动执行 setTimeout(executeTask, nextDelay);
中途停止的方法
如果需要在任意时刻停止这种交替执行,可以保存setTimeout返回的定时器ID,之后用clearTimeout清除:
let nextDelay = 5000; let timerId; function executeTask() { console.log('任务执行'); nextDelay = nextDelay === 5000 ? 1000 : 5000; timerId = setTimeout(executeTask, nextDelay); } // 启动 timerId = setTimeout(executeTask, nextDelay); // 需要停止时调用 // clearTimeout(timerId);
内容的提问来源于stack exchange,提问作者Cassidy
相关产品推荐
相关产品推荐

