如何取消所有挂起的$ timeouts?

时间:2015-08-31 15:31:11

标签: javascript angularjs timeout

我有一些代码使用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);
}

1 个答案:

答案 0 :(得分:2)

角度超时适用于promises,你可以调用它的cancel方法。 $timeout.cancel

$scope.catalog.timeouts.forEach(function(promises) {
    promises.cancel && promises.cancel();
});