我有一些轮询服务的代码,我需要一种方法来取消该间隔 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
事件,它将计时器设置为假,由于检查,它不会继续。但是,它可能有机会通过条件,触发事件,重置计时器,然后继续。知道是否有更防弹的方法来处理这种事情吗?基本上取消基于事件的轮询。
最佳答案
However, there could be a chance where it passed the condition, event fired, timer reset and now it continues on.
没有。 Node.js 是单线程的,并且通过事件循环工作,因此除非您允许(通过排队并在另一个事件中继续执行,例如
setTimeout
或 process.nextTick
),否则没有任何东西可以中断您正在运行的代码。如果您想避免再次调用
polling
,您应该怎么做? ,但是,使用 clearTimeout
.function events() {
var timer = null;
events.on('cancel', function() {
clearTimeout(timer);
});
function polling() {
//Get some data
events.emit('data', data);
timer = setTimeout(polling, 1000);
}
polling();
}
关于javascript - Node.js 从事件中取消 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596102/