如何在事件广播的超时延迟内停止间隔?
How to stop intervals inside Timeout delay on Event Broadcasts?
在我的 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');
}
以上工作正常。但是,这是我遇到的问题:
如果以防万一,用户在间隔检查开始之前注销,因为它包含在 20 秒后开始的超时中,event:stop-intervals
广播将被错过。在这些情况下,间隔在设置的超时后开始,并且不知道 event:stop-intervals
在此之前被触发以停止间隔。
我的问题是:如何检查 event:stop-intervals
广播是否在指令中的间隔开始前触发? (或)如果 event:stop-intervals
甚至在触发超时间隔检查之前就被触发,指令如何停止间隔开始?
在您的 stopInterval()
方法中使用 $timeout.cancel()
取消 $timeout
承诺将解决您的问题,因此甚至不会设置间隔:
var intervalPromise;
var tiemoutPromise = $timeout(function () {
stopInterval();
intervalPromise = $interval(function() {
checkNewEmail();
}, 30000);
}, 20000);
$scope.$on('event:stop-intervals', function() {
stopInterval();
});
$scope.$on('$destroy', function() {
stopInterval();
});
function stopInterval() {
$timeout.cancel(tiemoutPromise);
$interval.cancel(intervalPromise);
}
在我的 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');
}
以上工作正常。但是,这是我遇到的问题:
如果以防万一,用户在间隔检查开始之前注销,因为它包含在 20 秒后开始的超时中,event:stop-intervals
广播将被错过。在这些情况下,间隔在设置的超时后开始,并且不知道 event:stop-intervals
在此之前被触发以停止间隔。
我的问题是:如何检查 event:stop-intervals
广播是否在指令中的间隔开始前触发? (或)如果 event:stop-intervals
甚至在触发超时间隔检查之前就被触发,指令如何停止间隔开始?
在您的 stopInterval()
方法中使用 $timeout.cancel()
取消 $timeout
承诺将解决您的问题,因此甚至不会设置间隔:
var intervalPromise;
var tiemoutPromise = $timeout(function () {
stopInterval();
intervalPromise = $interval(function() {
checkNewEmail();
}, 30000);
}, 20000);
$scope.$on('event:stop-intervals', function() {
stopInterval();
});
$scope.$on('$destroy', function() {
stopInterval();
});
function stopInterval() {
$timeout.cancel(tiemoutPromise);
$interval.cancel(intervalPromise);
}