2011-10-01 3 views
3

애니메이션을 표시하는 루프를 호출하는 setInterval이 있습니다.clearInterval 후 코드 실행

사용자 입력에 대한 응답으로 clearInterval 일 때 대기열에 하나 이상의 루프 콜백이있을 수 있습니다. clearInterval 문 바로 뒤에 함수 호출을 넣으면 함수 호출이 먼저 끝나고 (화면에 무엇인가 인쇄), 대기중인 루프 콜백이 실행되어 인쇄 할 내용을 지 웁니다.

아래 코드를 참조하십시오.

function loop() { 
    // print something to screen 
} 

var timer = setInterval(loop(), 30); 

canvas.onkeypress = function (event) { 
    clearInterval(timer); 
    // print something else to screen 
} 

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? // print something else to screen에 지연을 넣으시겠습니까? 루프 내에서 새로운 인쇄 작업을 수행합니까?

편집 : 답변 해 주셔서 감사합니다. 나중에 참조 할 수있는 문제는 추가 인쇄를 유발 한 이벤트가 루프 내에 묻혀 있었기 때문에 컨트롤이 완료되면 미완료 루프로 되돌려 져서 다시 덮어 쓰게되었습니다. 건배. 당신은 아마 의미 모든

var should; 

function loop() { 
    if(!should) return; // ignore this loop iteration if said so 

    // print something to screen 
} 

should = true; 
var timer = setInterval(loop, 30); // I guess you meant 'loop' without '()' 

canvas.onkeypress = function (event) { 
    should = false; // announce that loop really should stop 
    clearInterval(timer); 
    // print something else to screen 
} 

답변

1

당신은 또한 어떤 기능 대기 플래그를 사용할 수 둘째

var timer = setInterval(loop, 30); 

를 확실 clearInterval를 호출 깨끗하지 않을 수 있습니다 보류중인 대기열은 loop()입니까? 이러한 경우 가드를 사용하여 이러한 통화를 쉽게 사용 중지 할 수 있습니다.

var done = false; 

function loop() { 
    if(!done) { 
     // print something to screen 
    } 
} 

var timer = setInterval(loop(), 30); 

canvas.onkeypress = function (event) { 
    clearInterval(timer); 
    done = true; 
    // print something else to screen 
} 
2

첫째 : 무시하기 위해