我有以下功能:的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包。這是你指的是什麼? –