清除javascript或Java中的轮询超时

清除javascript或Java中的轮询超时,javascript,angularjs,polling,Javascript,Angularjs,Polling,例如,这是我用来轮询以检查数据库中是否有新通知的函数 我根本不清除超时,也不使用$timeout。这是错误的吗?它会导致诸如冻结或CPU开销之类的问题吗 我如何才能清除和检查我是否真的清除了它 所有功能和ui方面。来自angular service/factory,不带控制器(服务调用除外)您可以在根控制器中侦听$destroy事件,并调用服务的公共方法来清除超时: module.factory(“myService”,函数($scope,$timeout){ 无功定时器; 函数扫描(id){

例如,这是我用来轮询以检查数据库中是否有新通知的函数

我根本不清除超时,也不使用$timeout。这是错误的吗?它会导致诸如冻结或CPU开销之类的问题吗

我如何才能清除和检查我是否真的清除了它

所有功能和ui方面。来自angular service/factory,不带控制器(服务调用除外)

您可以在根控制器中侦听$destroy事件,并调用服务的公共方法来清除超时:

module.factory(“myService”,函数($scope,$timeout){
无功定时器;
函数扫描(id){
//$http。。。。。。
计时器=设置超时(函数(){scan())},1000);
}
函数destroyTimer(){
中频(定时器){
$timeout.cancel(计时器);
}
}
返回{
销毁计时器:销毁计时器,
// ...
}
});
module.controller(“RootController”、函数($scope、$timeout、myService){
$scope.$on(“$destroy”,函数(){
myService.destroyTimer();
});

});您只需在
scanplete
函数中再次调用

function scan (id) {    
    $http({
            method: "POST",
            url:( "url"),
            headers: {'Content-Type': 'application/x-www-form-urlencoded'},
            data: $.param({id: id}),
        })
            .then(scanComplete)
            .catch(function(message) {
                throw new Error("XHR Failed ",message);
            });

        function scanComplete(response, status, headers, config) {
            //do something , show errors, popup , call to other functions
        }
  setTimeout(function() {scan())}, 1000);
}
这将确保您在任何给定时间点只触发了一次
扫描

我根本不清除超时,也不使用$timeout。它是 错误它会导致诸如冻结或CPU开销之类的问题吗


由于您在任何时间点只触发一次
scan
,而且在第一次扫描完成后也会触发一次,因此我不认为这会产生任何CPU开销。

您没有共享ajax代码,但您应该在ajax调用成功或失败后调用
setTimeout
,并且在该
scan
方法中。@gurvinder372。更新了我的代码我的计时器在服务中,而不是控制器,或者我应该将承诺返回给控制器。还有,我怎么知道毁灭已经被点燃?毁灭何时会被点燃?我知道这可能是个问题?页面没有刷新,例如3天,evrey 1秒计时器为fierd@Guz我不明白这一点,我知道这可能是个问题?你能换一种说法吗?我的页面在不刷新或移动到另一个路径的情况下工作,并且计时器每1秒启动一次,我想确保在不清理或删除它的情况下不会对我的计算机、CPU或浏览器造成问题smth@Guz你不仅每秒都在扫描,您可能在任何给定的时间点触发多个扫描-这完全没有用。理想情况下,这是否会对您的CPU造成问题取决于扫描的CPU密集程度。如果其中一个请求出现问题,将不再进行扫描。如果超时超出扫描完成时间,计时器将继续工作,当服务器启动时,它将恢复工作,因此我知道这是否是一个好的解决方案
function scanComplete(response, status, headers, config) {
    //do something , show errors, popup , call to other functions
    setTimeout( scan, 1000); //invoke after your ajax is complete
}