2017-12-29 6 views
0
나는 퀴즈 형 응용 프로그램을 만들고있어

는,에서 10 초 타이머는 다음과 같이 진행됩니다

$scope.timer2 = function() { 
    setTimeout(function() { 
     console.log('times up!!!!'); 
    }, 10000) 
} 

그리고이 질문은 다음과 같이 도착했을 때 호출되는 :

timerHandle = setTimeout($scope.timer2()); 

그리고

timer2 실행 또 다른 질문이 튀어 나올 때 등등 질문의 또 다른 방법은 팝업되고, 사용자는 다음 또한 옵션을 선택한다는 것입니다 후 새로운 질문이 떠오른다. 지금까지는 그렇게 좋았지 만 문제는 5 초가 지나고 사용자가 옵션을 선택한다고 가정하면 "timer2"는 여전히 "시간을 !!" 5 초 후에 새로운 질문을위한 또 다른 타이머는 "시간을 !!"보여줍니다. 사용자가 옵션을 선택하지 않은 경우.

나는 사용자가 옵션을 선택할 때 timer2을 멈추고 새로운 질문이 도착하면이 타이머를 다시 호출하기를 원합니다. 이 사용자가 옵션을 선택하면 실행되는 각 코드는 다음과 같습니다 -

$scope.checkanswer=function(optionchoosed){ 
      $http.get('/quiz/checkanswer?optionchoosed='+ optionchoosed).then(function(res){ 
       if(res.data=="correct"){ 
        $scope.flag1=true; 
        $scope.flag2=false; 

       }else{ 
        $scope.flag2=true; 
        $scope.flag1=false; 
       } 
       $http.get('/quiz/getquestions').then(function(res){ 
       console.log("respo"); 
       $scope.questions=res.data; 
       clearTimeout($scope.timerHandle); //not working 
       timerHandle = setTimeout($scope.timer2()); 
+0

내가 질문을 편집했다. –

+0

예, 감사합니다. – Asim

답변

2

당신은 AngularJS와 $timeout의 서비스를 사용하여 시도 할 수 있습니다. 그런 다음이 라인을 따라 뭔가를 할 :

var myTimer = $timeout(function(){ 
       console.log("hello world") 
      }, 5000); 

    .... 
$timeout.cancel(myTimer); 
+0

많은 감사합니다 :) 나는 아직도 원인이 무엇인지 모르지만 그것은 매력처럼 작동했습니다. – Asim

+0

도움이되었습니다. – Nat

+2

AngularJS는 자체 이벤트 처리 루프를 제공하여 일반적인 JavaScript 흐름을 수정합니다. 이렇게하면 JavaScript가 클래식 및 AngularJS 실행 컨텍스트로 분할됩니다. AngularJS 실행 컨텍스트에 적용된 작업 만 AngularJS 데이터 바인딩, 예외 처리, 속성 관찰 등의 이점을 얻을 수 있습니다. [$ timeout] (https://docs.angularjs.org/api/ng/service/$timeout) 서비스는'setTimeout'에 대한 AngularJS 래퍼입니다. – georgeawg

1

setTimeout에 대한 MDN 문서를 살펴 보자.
이 함수는 고유 한 식별자를 반환합니다. 이 시점에서, 당신은 매개 변수로 UID 것을 전달 clearTimeout를 호출 할 수

let myTimeout = setTimeout(myFunction, millis); //Start a timeout for function myFunction with millis delay. 
clearTimeout(myTimeout); //Cancel the timeout before the function myFunction is called. 
+0

위의 clearTimeout (timerHandle)을 사용하고 있지만 함수가 중지되지 않습니다. 그것은 전에 불려 왔지만 멈추지 않았습니다. – Asim

+0

문제는 clearTimeout (timerHandle)을 호출 한 직후에 timerHandle을 설정한다는 것입니다. –

+0

하지만 다시 첫 번째 것을 멈추고 두 번째 것을 실행해야합니다. 맞습니까? – Asim

0

당신은 작업 예를 내게는 추측을 할 수 있도록 제공하지 않기 때문에. 함수가 내부 setTimeout 핸들을 반환하지 않으므로 취소 할 수 없습니다. 무엇 이러한 변경에 대해 : 당신이 AngularJS와 요구하지만 문제는 정말 generical 때문에

$scope.timer2 = function() { 
    return setTimeout(function() { // added return statement 
     console.log('times up!!!!'); 
    }, 10000) 
} 

다음

timerHandle = $scope.timer2(); // simply call timer2 that returns handle to inner setTimeout