У меня действительно странная проблема со службой $ timeout AngularJS, но давайте начнем с самого начала.
У меня есть веб-приложение, которое должно пинговать сервер каждые 3 секунды (более или менее). Итак, я использую сервис $ timeout, чтобы отправить запрос "/ ping" следующим образом:
angular.module(…)
.factory('ping', ['$http', '$timeout', 'auth', function ($http, $timeout, auth) {
return {
init: function () {
(function sendPing() {
var pingInterval = 3000;
if (auth.isLoggedIn()) {
$http
.post('/ping')
.success(function () {
$timeout(sendPing, pingInterval);
})
.error(function () {
$timeout(sendPing, pingInterval);
});
} else {
$timeout(sendPing, pingInterval);
}
})();
}
};
}])
.run([ 'ping', … , function (ping, …) {
//…
ping.init();
//…
}]);
И это вообще работает. Однако в последнее время я столкнулся с очень странным поведением - кажется, что иногда (редко) интервал между отправкой запросов "/ ping" увеличивается с 3 секунд до даже 2 минут. У веб-приложения есть много клиентов (они используют Chrome), но для большинства из них проблема не возникает. К сожалению, у меня нет доступа к рабочим станциям «проблемных» клиентов (виртуальным машинам), поэтому трудно сказать, есть ли проблема с длительной загрузкой DOM или что-то еще. Тем не менее, они не сообщили о каких-либо проблемах пользовательского интерфейса.
Журналы сервера IIS показывают, что запросы «/ ping» от этих клиентов даже не достигли сервера. Сначала я думал, что это может быть связано с функцией «Регулирование фоновых вкладок» в Chrome, но, насколько я знаю, клиенты поддерживают вкладку (с открытым веб-приложением) активной. Я знаю, что было бы хорошо зарегистрировать некоторые дополнительные данные для функции «sendPing ()», но я не могу сделать это прямо сейчас (все производственные развертывания остановлены из-за политики компании).
- AngularJS версия: 1.0.7
- Chrome версия: 68.0.3
Вопрос: Возможно ли, что это проблема AngularJS? Если так, в чем может быть причина?