В моем Angular 1.5 после того, как пользователь входит в свою учетную запись, у меня есть различные директивы, которые запускают свой интервал в течение тайм-аута.Например, у меня есть это UserEmailNotificationsCtrl
в одной из директив для проверки новых писем:
var intervalPromise;
$timeout(function () {
stopInterval();
intervalPromise = $interval(function() {
checkNewEmail();
}, 30000);
}, 20000);
$scope.$on('event:stop-intervals', function() {
stopInterval();
});
$scope.$on('$destroy', function() {
stopInterval();
});
function stopInterval() {
$interval.cancel(intervalPromise);
}
Если пользователь выйдет из системы, я передам событие, чтобы вышеуказанный интервал был остановлен, чтобы предотвратить 400Плохие запросы:
function logout() {
$rootScope.$broadcast('event:stop-intervals');
}
Вышеуказанное работает отлично.Однако вот проблема, с которой я столкнулся:
В случае incase пользователь выходит из системы до того, как начнутся проверки интервала, так как он заключен в тайм-аут для запуска через 20 секунд, широковещательная передача event:stop-intervals
пропущена.,В этих случаях интервал начинается после установленного времени ожидания и он не знает, что event:stop-intervals
был запущен, чтобы остановить интервалы до этого.
Мой вопрос: Как я могу проверить, если event:stop-intervals
трансляция была запущена до начала интервала в директивах?(или) Как директива может остановить запуск интервала, если event:stop-intervals
был запущен даже до того, как была запущена проверка интервала с тайм-аутом?