2017-12-29 4 views
0

나는 창 블라인드의 움직임을 시뮬레이션하는 아주 간단한 함수를 만들고 싶었다. 블라인드가 UP, DOWN 또는 STOP이되어야하는지 여부를 나타내는 direction 매개 변수가있는 요청을 수신하는 서버에서 실행됩니다.매개 변수와 함께 JS clearTimeout을 어떻게 사용합니까?

시뮬레이션은 다음과 같이 작동합니다. 요청은 direction 매개 변수와 함께 제공되고 서버는 블라인드가 MOVING이라고 응답합니다. 방향에 관계없이 움직임은 setTimeout 기능에서 볼 수 있듯이 10 초 동안 지속됩니다. 요점은 서버가 direction === STOP이라는 요청을 수신하면 서버는 clearTimeout을 호출하여 블라인드의 동작을 "중지"하고 다른 블라인드 상태를 반환하여 블라인드가 PARTLY_CLOSED이라고 말합니다.

지금까지이 방법으로 작동합니다. 어떤 방향으로 요청을 보내면 서버는 MOVING으로 응답합니다. "이동"중에 clearTimeout에 전화하면 실제로는 두 번째 setTimeout 기능이 시작됩니다.

내 질문은 : 코드를 올바르게 작성하고 어떻게 setTimeout 함수를 매개 변수화합니까? 엔드 포인트 내부

let blindState = "OPENED"; 
const blindMovementFunction = (direction) => setTimeout((direction) => { 
    console.log("### direction", direction); 
    if (direction === "UP") { 
     blindState = "OPENED" 
    } else if (direction === "DOWN") { 
     blindState = "CLOSED"; 
    } 
}, 10000); 

사용법 : 여기

코드입니다 당신은 clearTimeout에 함수 참조를 전달하는

if (req.query.direction === "STOP") { 
      console.log("### blindMovementFunction", blindMovementFunction); 
      clearTimeout(blindMovementFunction); 
      blindState = "PARTLY_CLOSED"; 
      res.send(blindState); 
     } else { 
      blindState = "MOVING"; 
      res.send(blindState); 

      blindMovementFunction(req.query.direction); 
     } 
+0

, 그것의 setTimeout 호출에 의해 생성되는 ID로 사용되어야로 제한-ID의 수익을 지속. – Axnyff

+0

@Axnyff 귀하의 의견을 조금 더 넓힐 수 있습니까? 모든 스 니펫은 코드의 다른 위치에 배치됩니다. 첫 번째 스 니펫은 '전역'이고 두 번째 스 니펫은 요청의 처리기 기능 안에 있습니다. ID를 어디에 할당해야합니까? 요청 처리기 함수에서? –

답변

3

, 그것은 timeoutID는 세계에서 정의 setTimeout()

에 의해 반환해야 범위

setTimeout() 방법

timeoutID = blindMovementFunction(req.query.direction) 

와 제대로 사항 clearTimeout를 사용하지 않는

clearTimeout(timeoutID); 
+1

감사합니다. 당신의 솔루션은 효과가 있었고 모든 것이 이제는 괜찮습니다. 코드 자체에 연결되지 않은 기술적 인 충돌이있었습니다. 다시 한 번 감사드립니다! –

관련 문제