Javascript 强制setInterval转到循环中的下一步

Javascript 强制setInterval转到循环中的下一步,javascript,node.js,Javascript,Node.js,是否可以强制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 a

是否可以强制
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

您可以将id存储在计时器数组中并提取事件处理程序函数,这样您就可以更好地控制何时调用事件处理程序

  • 为事件创建处理程序函数
  • 当按下全局计时器数组时,请记住存储名称和计时器id
  • 如果事件发生在通过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();
     }
    

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

    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() {
    
    }
    

    似乎
    global.timer
    没有
    step
    属性。不,这是不可能的。您可以设置一个变量并在迭代回调中使用显式测试来执行这样的控制,但机制本身只能启动和停止。通过“转到下一个勾号”,OP是否意味着停止计时器,运行函数,然后再次启动计时器?就像停止计时器,做任何中间任务,然后继续间隔?@Blundering哲学家想象一下,我需要向某人发送报价,我会等待一段时间,等待他的反应,如果他/她拒绝报价,我想发送给另一个人,但不要等待剩余的时间。