强制setInterval进入循环的下一步

问题描述 投票:-1回答:2

有可能迫使setInterval像这样下一步吗?:

global.timers = [] ;

var index = global.timers.length ;

global.timers[index] = setInterval(()=>{
      // ...
},15000);

// pseudo code 
if (event1 occured)
     global.timers[x].step++ // Don't wait for remained time and go to next tick
javascript node.js
2个回答
0
投票

您可以简单地清除间隔并再次创建它

global.timers = [] ;

var index = global.timers.length ;

global.timers[index] = setInterval(fn,15000);

// pseudo code 
if (event1 occured) {
    clearInterval(global.timers[x]);
    global.timers[index] = setInterval(fn,15000);
}
function fn() {

}

0
投票

您可以将id存储在timers数组中并提取事件处理函数,然后您可以更好地控制何时调用事件处理程序。

  1. 为事件创建处理函数
  2. 推送到全局计时器数组时,请记住存储名称和计时器ID。
  3. 如果在通过setInterval调用计时器之前发生了事件,请停止计时器并直接调用处理程序。

例:

function coolEventHandler () {
  console.log('handling cool event');
}

timers[0] = { name: 'coolEvent', id: setInterval(coolEventHandler, 15000) };

if('coolEvent') {
  // find the correct timer
  timer = timers.find(t => t.name === 'coolEvent');
  // stop the timer so the callback is never invoked
  // you probably want to remove it from the global timers array here too.
  clearInterval(timer.id);
  // call the handler directly
  coolEventHandler();
 }
© www.soinside.com 2019 - 2024. All rights reserved.