我有一项服务,每3秒检查一次项目状态。如果项目状态已准备就绪,则返回状态字符串。否则,请使用$timeout
等待3秒钟,然后重试。
我的问题是我想在用户触发某些事件时取消或停止递归超时(例如:离开当前页面),但我不知道该怎么做。
服务:
angular.module('app')
.factory('ItemService', ItemService);
function ItemService($timeout, DataService) {
var service = {
checkStatus: checkStatus
};
function checkStatus() {
return DataService.getItemStatus()
.then(function(status){
if (status === 'ready') {
return status;
} else {
// the item is not ready. Check again after 3 seconds
return $timeout(function() {
return checkStatus();
}, 3000)
}
});
}
}
客户端:
angular.module('app')
.controller('ItemCtrl', ItemCtrl);
function ItemCtrl($scope, ItemService) {
ItemService.checkStatus()
.then(function(status) {
// do somethin when item is ready.
});
$scope.$on('destroy', function(){
// Should stop the $timeout recursive, but don't know how..
});
}
答案 0 :(得分:0)
您应该可以使用
取消角度超时$timeout.cancel(promise)
所以这样的事情应该有效:
var promise = ItemService.checkStatus();
promise.then(function(status) {
// do somethin when item is ready.
});
$scope.$on('destroy', function(){
if(typeof promise.then === 'function') {
$timeout.cancel(promise);
}
});