我有一个Angular SPA我正在运行
Angular Loading Bar和AngularJS v1.4.9.
一段时间以来,它已经发生了这样的情况:在应用程序加载后,条形图片在一段时间后卡住了,表明并非所有请求都已完成.另外,我在代码中的console.log()之一已经连续触发,每秒大约1-2次.条形图完成,并且当用户重新加载页面时,console.log正常工作(但不会自行停止).
console.log()设置在附加到ng-disabled指令的函数内,所以我知道它是正在进行的摘要周期的指示器.
我使用Chrome作为浏览器,最近我进行了分析运行.
这是我看到的一些屏幕截图:
这是一个广阔的视野.如图所示,它首先发生在100ms,然后是400,然后是600,依此类推(我做了3s运行).
这是第一个垂直条带.并非所有这些看起来都与此完全相同,但completeOutstandingRequest,timeout和Browser.self.defer方法始终存在. searchDisable和log方法是我们的,日志就是我上面谈到的那个.
这是另一个用于比较的,但这有点不同 – 它有另一个浏览器方法:self.url.我不确定它是做什么的.
以下是我发现的一些可能相关的问题:
Timeout callback can occur in the middle of a digest cycle in Firefox
$browser.defer ends up triggering changeDetection in zonejs through settimeout
附:我认为这个问题首先是在我们为代码添加一些拦截器以进行一些自动重定向时开始的 – 例如当会话超时并且用户点击某些内容时,他会自动返回登录页面重新登录.
这是拦截器:
interceptor.$inject = ['$rootScope','$q']; function interceptor($rootScope,$q) { return { responseError: function (rejection) { var config = rejection.config || {}; if (!config.ignoreAuthModule) { switch (rejection.status) { case 401: var deferred = $q.defer(); $rootScope.$broadcast('event:auth-loginrequired',rejection); return deferred.promise; case 403: $rootScope.$broadcast('event:auth-forbidden',rejection); break; } } return $q.reject(rejection); } }; } $httpProvider.interceptors.push(interceptor);