2016-11-14 3 views
-3

내 proble은 setintervall 함수에 관한 것입니다. first()second() 실행이 완료되면 thrice()이라는 함수를 호출합니다. 저것에 proble가 없다. 아래의 코드 :자바 스크립트 중지 간격 및 동작

var oneFinish = false; 
var twoFinish = false; 

function first() { 
    console.log("FUNCTION first RUNNING"); 
    for (i = 0; i < 5; i++) { 
     console.log("first " + i); 
    } 
    console.log("FUNCTION first FINISH"); 
    oneFinish = true; 
} 

function second() { 
    console.log("FUNCTION second RUNNING"); 
    for (i = 0; i < 10; i++) { 
     console.log("second " + i); 
    } 
    console.log("FUNCTION second FINISH"); 
    twoFinish = true; 
} 

function thrice() { 
    var intev = setInterval(function() { 
     if (oneFinish && twoFinish) { 
      console.log("FUNCTION thrice RUNNING"); 
      oneFinish = false; 
      twoFinish = false; 
      clearInterval(intev); 
     } 
    }, 3000); 
    console.log("FUNCTION thrice FINISH"); 
} 

first(); 
second(); 
thrice(); 

결과는 다음과 같다 :

당신은 출력의 에 볼
FUNCTION first RUNNING 
first 0 
first 1 
first 2 
first 3 
first 4 
FUNCTION first FINISH 
FUNCTION second RUNNING 
second 0 
second 1 
second 2 
second 3 
second 4 
second 5 
second 6 
second 7 
second 8 
second 9 
FUNCTION second FINISH 
FUNCTION thrice FINISH 
FUNCTION thrice RUNNING 

, 그것은 문제 FUNCTION thrice FINISH 당신 때문입니다 FUNCTION thrice RUNNING

+0

당신은 비동기에 대해 들었습니다? –

+0

예, 들었습니다. 왜 downvote? 더 많은 설명을 원하십니까? 아니면 질문을 왜 싫어하는거야? – Aroniaina

답변

2

왜냐하면 setInterval의 모든 함수 내용이 3000 밀리 초 후에 호출되기 때문입니다. setInterval을의 그것의 목표는 : http://www.w3schools.com/jsref/met_win_setinterval.asp

var intev = setInterval(function() { 
    if (oneFinish && twoFinish) { 
     console.log("FUNCTION thrice RUNNING"); 
     oneFinish = false; 
     twoFinish = false; 
     clearInterval(intev); 
    } 
}, 3000); 
console.log("FUNCTION thrice FINISH"); 

는 순서를 해결하려면, 당신은 콜백 함수 내에서 console.log("FUNCTION thrice FINISH");을 넣어 한 :

var intev = setInterval(function() { 
    if (oneFinish && twoFinish) { 
     console.log("FUNCTION thrice RUNNING"); 
     oneFinish = false; 
     twoFinish = false; 
     clearInterval(intev); 
     console.log("FUNCTION thrice FINISH"); 
    } 
}, 3000); 
+1

문제를 해결하지 못했지만 문제를 설명했습니다. – Feathercrown

+0

대답 해 주셔서 감사합니다, 저를 간섭하는 해결책이 아닙니다! 그러나 설명. – Aroniaina

0

전에 실행이다 3 초 후에 로그가 시작되지만 즉시 종료됩니다. 이것을 시도해보십시오 :

+0

감사합니다, 당신이 나에게 설명을 주겠다는 것을 압니다 만, 2 가지 대답을 받아 들일 수 없습니다. 왜냐하면 이타심은 @ali_o_kan을 선택하기 때문입니다. – Aroniaina

+0

괜찮습니다. 그의 것이 지금보다 더 완벽합니다. – Feathercrown