我有一些轮询服务的代码,我需要一种通过事件取消间隔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,由于检查它不会继续。但是,它可能有机会通过条件,事件触发,计时器重置,现在它继续。
任何想法是否有更加防弹的方式来处理这种事情?基本上取消基于事件的轮询。
答案 0 :(得分:0)
然而,它可能有可能通过条件,事件被触发,计时器重置,现在它继续。
不。 Node.js是单线程的,并且通过事件循环工作,因此除非你允许,否则没有任何东西可以中断你正在运行的代码(通过在另一个事件中排队并继续执行,例如使用setTimeout
或{{1 }})。
如果您想再避免再次使用process.nextTick
,请注意使用polling
。
clearTimeout