2012-08-29 3 views
4

setTimeout 함수를 사용하여 루프를 만들었습니다. 두 번째 또는 세 번째 단계에서 호출이 발생하면 문제가 발생합니다. 이 제 기능 모습입니다 : 내가 변수 값의 69, 68 콘솔 경우자바 스크립트 setTimeout 함수가 너무 많이 실행되기 시작합니다.

var value = 70, 
    intervalID = null; 

function interval() { 
    intervalID = setTimeout(countDown, 1000); 
} 

function countDown() { 
    value--; 
    if(value > 0) { 
    clearTimeout(intervalID); 
    interval(); 
    } else { 
    endInterval(); 
    } 
} 

function endInterval() { 
    // do something 
} 

이후는 하나의 함수 호출에 두 번 변수 값을 감소 시작하는. 한 자리에서 countDown() 함수를 호출하지는 않습니다.

Javascript Interval 무엇이 문제 일 수 있습니까?

편집 : 이제이 코드가 작동합니다.

+3

저에게 잘 작동합니다 - http://jsfiddle.net/wZ3GM/ 초기 함수를 두 번 호출하지 않았습니까? –

+0

실제로 코드에서 작성하지 않은 루프 또는 "타임 아웃 루프"가 생성 되었습니까? – Prusse

+0

다시 전화를 걸 때마다 시간 제한을 지워야하고 작동하기 시작했습니다. 팁을 주셔서 감사합니다 – JanHocevar

답변

4

이전의 작업을 중지하여 시간 초과를 "sanitize"하는 것이 좋습니다.

function interval() { 
    clearTimeout(intervalID); 
    intervalID = setTimeout(countDown, 1000); 
} 

그러나 병의 원인 대신 증상을 제어하는 ​​것처럼 보입니다. 따라서 문제의 원인을 파악하는 것이 좋습니다.

+0

아니요 자체 콜백 기능에서 시간 초과를 지울 필요가 없습니다. – Bergi

+2

같은 클래스의 html에 2 개의 dom 요소가 있다는 것을 알았습니다. 그래서 모든 것이 두 번 실행되기 시작했습니다. – JanHocevar

+0

@Bergi, 맞습니다. 그러나 전역 변수에 타임 아웃 ID를 할당하면이 변수에 할당 된 이전 시간 제한이 실행되는지 여부를 알 수 없습니다. intervalID 변수를 사용할 수 있기 때문에 무결성을 위반한다고 생각합니다. –

관련 문제