javascript 화면에 실행중인 전체 setInterval 한 번에 종료하는 방법이 있나요?

조회수 1721회

자바스크립트에서 setInterval을 사용하여 타이머를 사용중입니다. 화면 특성 상 여러 개를 사용 중인데. Ajax 통신 후 현재 화면에서 동작 중인 모든 setInterval에 clearInterval 효과를 줄 수 있을까요? 한 번에 동작을 멈추고 싶습니다.

1 답변

  • var highestIntervalId = setInterval(";");
    for (var i = 0 ; i < highestIntervalId ; i++) {
      clearInterval(i);
    }
    

    setTimeout이나 setInterval은 실행 후 숫자 타입의 아이디를 반환하는데 이 값은 함수 호출때마다 증가합니다.

    아이디가 계속 증가하는 숫자라는걸 이용해서, 가장 최근의 호출 반환값만큼 0부터 증가시켜 모두 지우는 방식의 코드입니다.

    • setInterval은 호출될 때마다 1씩 증가된 값(intervalID)을 반환합니다. (처음 값 0) 위 코드라면 의도치 않은 setInterval 모두 멈추게 되어버릴 수 있어요. 그리고 어플리케이션이 재시작/멈춤/재시작... 을 반복하는 특성을 가졌다하면 id값 자체가 무진장 커져버릴 수 있습니다. 그럼 이미 멈춰있는 ID를 또 clear 시키는 무의미한 작업을 하게 될 뿐만 아니라 for문을 도는 시간이 점점 길어지겠죠.(뭐 금방 돌긴 하겠지만요.) doodoji 2020.1.22 17:17
    • 정지가 필요한 setTimeout / setInterval을 특정하고 그것이 실행될 때마다 해당 리턴값을 전역 배열이나 상위 스코프의 배열에 담아두는 것이 필요합니다. 나중에 정지가 필요한 시점이 되면 그 배열을 돌면서 clearTimeout / clearInterval 을 해 주시는게 좀 더 합리적이라고 생각합니다. doodoji 2020.1.22 17:17
    • 마자용 편집요청빌런 2020.1.22 17:34

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)