2016-12-22 5 views
0

핸들 또는 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 파일의 버튼으로 멈출 수는 없습니다.

+0

'set *()'함수가 반환하는 것이 중요하지 않으므로 항상 불투명으로 취급해야합니다. 실제 문제가 무엇인지는 아직 명확하지 않습니다. socket.io 이벤트는 같은 부모 범위를 공유하므로'clearInterval()'에 대한 간격 반환 값에 액세스하는 데 문제가 없어야합니다. 누락 된 한 가지는 반복 실행의 경우'gettemp '이벤트 핸들러 내부에서'clearInterval (myInterval)'입니다. – mscdex

답변

0

도움 주셔서 감사합니다. 나는 이것이 잘 작동하고 있음을 알았다. 내 혼란은 gettemp의 첫 번째 콘솔 로그가 stopread의 콘솔 로그와 다르므로 작동하지 않는다고 가정했습니다. setInterval 시간이 초과 될 때마다 myInterval이 업데이트되고 있음을 발견했습니다. 이상하게도 gettemp 서비스를 다시 호출하지 않고도이 작업을 수행 할 수 있습니다. 단 한번만 호출합니다. 콘솔 로그를 콜백에 넣고 시간이 초과 될 때마다 다른 myInterval을 보았습니다. 정지 표시가 올바른 myInterval을 보았습니다. 비동기 타이밍이 맞다면 놓칠 수도 있다고 생각합니다.

반복 실행에 대한 마지막 코멘트는 모든 클라이언트가 필연적으로 원하지 않는 서비스를 중단 할 수 있다고 지적했습니다. 클라이언트에 setInterval을 놓고 서비스에서 gettemp를 요청하게합니다.