我是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;
});