在AngularJS中停止setTimeout函数(提示:使用$ timeout)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AngularJS中停止setTimeout函数(提示:使用$ timeout)相关的知识,希望对你有一定的参考价值。
我正在制作一个测验类型的应用程序,当用户得到一个问题时,10秒的计时器就像这样:
$scope.timer2 = function() {
setTimeout(function() {
console.log('times up!!!!');
}, 10000)
}
当问题到达时,它会被调用:
timerHandle = setTimeout($scope.timer2());
在此timer2
执行后弹出另一个问题等等,弹出问题的另一种方式是用户选择一个选项,然后出现一个新问题。到目前为止一直很好,但问题是如果假设5秒钟通过然后用户选择一个选项,“timer2”仍显示“times up !!”再过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());
您可以尝试使用AngularJS $timeout的服务。然后沿着这些方向做一些事情:
var myTimer = $timeout(function(){
console.log("hello world")
}, 5000);
....
$timeout.cancel(myTimer);
查看setTimeout的MDN文档。 如您所见,该函数返回唯一标识符。此时,您可以调用clearTimeout将该UID作为参数传递:
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.
既然你没有提供工作实例让我做最好的猜测。你的函数不会从内部setTimeout
返回句柄,因此无法取消。这样的修改怎么样:
$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
以上是关于在AngularJS中停止setTimeout函数(提示:使用$ timeout)的主要内容,如果未能解决你的问题,请参考以下文章
0179 定时器 之 setTimeout() :开启定时器,5秒后关闭广告案例,停止定时器
Javascript setTimeout 是不是停止其他脚本执行
停止特定的setTimeout循环如何使用clearTimeout
聚合函数在页面刷新时复制 ng-repeat 中的项目。需要弄清楚如何停止重复。 Angularjs Mongodb mongoose