핸들 또는 ID를 가져 와서 setInterval을 지우려고하지만 setInterval이 긴 문자열을 반환합니다. 이 실행되면setInterval 핸들은 문자열이며 raspbian의 숫자가 아닙니다.
io.sockets.on('connection', function (client) {
var myInterval;
client.on('gettemp', function(data) {
myInterval = setInterval(function(){
getTemperature(client);
}, 2000);
console.log(myInterval);
});
client.on('stopread', function(data) {
clearInterval(myInterval);
});
나는 내가 CONSOLE.LOG (myInterval)에 myInterval 얻을, 정수가되어야하는 myInterval 로그 : 여기 내 코드입니다 무슨 일 것입니다
Timeout {
_called: false,
_idleTimeout: 2000,
_idlePrev:
TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
_unrefed: false,
msecs: 2000 },
_idleNext:
TimersList {
_idleNext: [Circular],
_idlePrev: [Circular],
_timer: Timer { '0': [Function: listOnTimeout], _list: [Circular] },
_unrefed: false,
msecs: 2000 },
_idleStart: 14937,
_onTimeout: [Function],
_timerArgs: undefined,
_repeat: 2000 }
이리? setInterval은 getTemperature (클라이언트) 함수에서 2000 밀리 초마다 온도를 방출하여 작동하지만 myInterval이 긴 문자열이기 때문에 clearInterval (myInterval)에 대한 핸들을 얻을 수 없어 중지 할 수 없습니다. 물론 node.js 어플리케이션을 시작하는 SSH를 사용하여^C를 멈출 수는 있지만 index.html 파일의 버튼으로 멈출 수는 없습니다.
'set *()'함수가 반환하는 것이 중요하지 않으므로 항상 불투명으로 취급해야합니다. 실제 문제가 무엇인지는 아직 명확하지 않습니다. socket.io 이벤트는 같은 부모 범위를 공유하므로'clearInterval()'에 대한 간격 반환 값에 액세스하는 데 문제가 없어야합니다. 누락 된 한 가지는 반복 실행의 경우'gettemp '이벤트 핸들러 내부에서'clearInterval (myInterval)'입니다. – mscdex