我有一些代码使用AngularJS $ timeout以特定间隔多次调用另一个函数,使用循环。我正在尝试创建一个取消功能,该功能将停止处理所有$超时。我意识到我可以用另一个循环执行此操作,遍历每个$ timeout,但有时页面将需要创建数千个$ timeouts,因此我真的希望有某种方法可以阻止所有当前待处理的$ timeouts 。这里的文档https://docs.angularjs.org/api/ng/service/ $ timeout似乎只是真的谈论使用cancel()来阻止特定的承诺。
是否可以在AngularJS中一次取消所有当前待处理的$ timeout,如果是,如何取消?
以下是相关代码的片段:
for(var i=1; i<=$scope.catalog.pages; i++) {
$scope.catalog.timeouts['fetch'+i] = $timeout(function() {
count++;
if (!$scope.catalog.isCancelled) {
$scope.results($scope.catalog.dataFile, {currentPage: count});
} else {
//cancel all the remaining timeouts somehow
}
}, 10*i);
}
答案 0 :(得分:2)
角度超时适用于promises,你可以调用它的cancel方法。 $timeout.cancel
$scope.catalog.timeouts.forEach(function(promises) {
promises.cancel && promises.cancel();
});