我有以下功能:的setInterval没有得到清除,功能不断得到执行
function monitorClimate() {
var sensorReadingInterval;
function startClimateMonitoring(interval) {
sensorReadingInterval = setInterval(function() {
io.emit('sensorReading', {
temperature: sensor.getTemp() + 'C',
humidity: sensor.getHumidity() + '%'
});
}, interval);
console.log('Climate control started!');
}
function stopClimateMonitoring() {
clearInterval(sensorReadingInterval);
console.log('Climate control stopped!');
}
return {
start: startClimateMonitoring,
stop: stopClimateMonitoring
};
}
我看一个按钮,这样的状态的改变:
button.watch(function(err, value) {
led.writeSync(value);
if (value == 1) {
monitorClimate().start(1000);
} else {
monitorClimate().stop();
}
});
的问题是,即使在调用monitorClimate().stop()
之后,setInterval也会一直处于触发状态,因此SocketIO将继续发射sensorReading事件。
我在这里做错了什么?
如果通过每次使用API调用函数来重新创建范围,那么关闭的目的是什么?您的不同通话不会在同一地点执行。这是不同的功能,所以不同的时间间隔。 –
你需要一个执行者服务,代码是混乱的。 –
谢谢你们!我显然是一个新手,所以找到最好的模式往往是我的挑战。 @RomanC你能指点我一些Executor服务上的阅读材料吗?或者,也许一些源代码实现它...简单的谷歌搜索导致我一个NPM包。这是你指的是什么? –