Node.js取消事件

时间:2015-09-15 21:37:57

标签: javascript node.js

我有一些轮询服务的代码,我需要一种通过事件取消间隔clearTimeout的方法。超时充当间隔,在函数内再次调用setTimeout。

因此,例如,我有另一个对象,它作为事件发射器公开,并且此过程轮询并沿途发送一些数据。这是一个简化的例子:

function events() {

  var timer = true;
  events.on('cancel', function() {
    timer = false;
  });

  function polling() {
    //Get some data
    events.emit('data', data);

    if (timer || typeof timer == 'number') {
      timer = setTimeout(polling, 1000);
    }
  }

  polling();

}

这可以工作,基本上当这个服务收到cancel事件时,它会将计时器设置为false,由于检查它不会继续。但是,它可能有机会通过条件,事件触发,计时器重置,现在它继续。

任何想法是否有更加防弹的方式来处理这种事情?基本上取消基于事件的轮询。

1 个答案:

答案 0 :(得分:0)

  

然而,它可能有可能通过条件,事件被触发,计时器重置,现在它继续。

不。 Node.js是单线程的,并且通过事件循环工作,因此除非你允许,否则没有任何东西可以中断你正在运行的代码(通过在另一个事件中排队并继续执行,例如使用setTimeout或{{1 }})。

如果您想再避免再次使用process.nextTick,请注意使用polling

clearTimeout