使用AngularJS超时



我是AngularJS的新手。我目前正在查看$timeout服务。我理解它就像setTimeout函数的包装器。文档中说它提供了异常处理。此外,文档中说我可以取消并刷新超时。

有人能向我解释一下超时后什么时候会发生异常吗?我也不明白为什么我需要刷新超时。我想要一个解释或者一个小提琴。就我的一生而言,我不知道为什么,甚至不知道如何使用这些附加功能。

更新:当我尝试运行stop函数时,会抛出与myTimer-get关联的catch处理程序。这是我的代码:

var myTimer = null; 
$scope.hasStarted = false; 
$scope.start = function () { 
  if ($scope.hasStarted === false) { 
    $scope.isTimerActive = true; 
    myTimer = $timeout(function () { $scope.isTimerActive = false; }, 5000); 
    myTimer.catch(function (err) { 
      alert("An error happened with the clock."); 
    }); 
  }
} 
$scope.stopClock = function () { 
  $timeout.cancel(myTimer); 
  $scope.isClockActive = false; 
}  

谢谢!

$timeout确实是最棒的。

异常处理

$timeout返回一个可能具有错误状态的promise。例如

 var timePromise = $timeout(function(){ 
    throw new Error('I messed up');
 }, 10000);
 timePromise.catch(function(err){
    // do something with the error
 });

在这里阅读所有关于承诺的内容。


取消

取消$timeout很容易。您不使用clearTimeout,而是将承诺传递回。

 var timePromise = $timeout(function(){
     // do thing
 }, 23432);
 // wait I didn't mean it!
 $timeout.cancel(timePromise);

冲洗

Flush对单元测试最有用,它最终会触发任何未完成的回调。

$timeout(function(){
   console.log('$timeout flush');
}, 222);
$timeout(function(){
   console.log('rocks my face');
}, 234232);
$timeout.flush(); // both console logs will fire right away!

或者这个文件:

var itsDone = false;
$timeout(function(){
   itsDone = true;
}, 5000);

这个测试:

// old no flush way (async)
it('should be done', function(done){
   expect(isDone).to.be.false;
   setTimeout(function(){
      expect(isDone).to.be.true;
      done();
   }, 5001);
});
// now with flush
it('should be done', function(){
   expect(isDone).to.be.false;
   $timeout.flush();
   expect(isDone).to.be.true;
});

相关内容

  • 没有找到相关文章

最新更新