我正在制作一个测验类型的应用程序,其中,当用户遇到问题时,计时器为10秒,如下所示:

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


当一个问题出现时,它被调用:

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


在执行此timer2之后,将弹出另一个问题,依此类推,弹出问题的另一种方式是,用户也选择了一个选项,然后又出现了一个新问题。到目前为止,还不错,但问题是,如果假设已过去了5秒,然后用户选择了一个选项,则“ timer2”仍显示“ times up !!”。再过5秒后,新问题的另一个计时器也会显示“ times up !!”如果用户尚未选择任何选项。

我要说的是,当用户选择任何选项时,我希望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());

最佳答案

您可以尝试使用AngularJS $timeout服务。
然后按照以下步骤进行操作:

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

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

关于javascript - 在AngularJS中停止setTimeout函数(提示:使用$ timeout),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48020909/

10-11 05:32