2012-05-03 2 views
2

setInterval()을 사용하여 간격을 설정하는 기능이 있지만 clearInterval()을 호출 한 후에도 else 상태가 계속 실행 중임을 콘솔에서 볼 수 있습니다. 어떻게 그 간격을 적절하게 제거 할 수 있습니까?clearInterval이이 코드에서 작동하지 않는 이유는 무엇입니까?

function increase(old, step, neu) { 
    var i = 0; 
    var delay2; 

    function countUp() { 
     if (i < 5) { 
      old += step; 
      // console.log("increase") 
      $("#total-price-value").text(old + " dollors"); 
      $("#total-price-value").digits(); 
      i++; 
      delay2 = setInterval(countUp, 80); 
     } else { 
      clearInterval(delay2); 
      console.log(delay2); 
     } 

    } 
    countUp(); 

}​ 

답변

10

타임 아웃과 간격의 차이에 대해 다소 혼란스러워합니다. 제한 시간은 한 번만 시작됩니다. 간격이 여러 번 발 생합니다. 간격을 사용하는 경우에는 한 번만 설정하면됩니다 (매번 설정하는 경우). 타임 아웃을 사용하는 경우, 매번 (당신이하고있는 것처럼) 시간 제한을 설정하기를 원할 것입니다.

문제를 해결하려면 시간 초과 (가장 쉬운 방법은 검색/바꾸기)로 전환하거나 간격을 한 번만 설정하십시오.

예를 들어, 여기에서 다섯까지 세는 setTimeout을 사용할 수있는 방법이다 : 시간 제한을 사용

var count = 0; 
function timeoutFired() { 
    count++; 
    if(count < 5) { 
     setTimeout(timeoutFired, 1000); 
    } 
} 
setTimeout(timeoutFired, 1000); 

, 우리는 계산을 중지 취소 할 필요가 없습니다; 단순히 타임 아웃을 설정하지 않으면 다시 실행되지 않습니다. 당신이 중지 간격을 사용하여 주기적으로 실행하는 코드를 원하는 경우에, 당신은 clearInterval를 호출해야합니다

var count = 0; 
function intervalFired() { 
    count++; 
    if(count >= 5) { 
     clearInterval(interval); 
    } 
} 
var interval = setInterval(intervalFired, 1000); 

: 여기

하나가 setInterval을 사용할 수있는 방법을 소개합니다. 우리가 계속하기를 원하지 않을 때마다 setTimeout 대 1 번만 setInterval이라고 부릅니다.

+2

이 나에게 사람의 코드를 보여! – Cheeso

2

분명히 setIntervalsetTimeout으로 착각했습니다. setInterval인 모든n 밀리 초를 실행하고 setTimeoutn 밀리 초 후에 한 번만 실행합니다.

나는 당신이 그렇게 here's a sample "5까지 눈금"싶어한다고 가정

function increase(old, step, neu) { 
    var i = 0; 

    interval = setInterval(function() { 
     if (i < 5) { 

      //do something at this "tick" 
      console.log(i); 

      i++; 
     } else { 
      //else, stop 
      clearInterval(interval); 
     } 
    },80); 

} 

increase(); 
관련 문제