Angular 角度2+;ngrx:机具会话计时器
我正在构建一个带有会话倒计时的应用程序,它在登录后设置为3600 当计时器达到60时,应用程序应提醒用户延长会话。当计时器达到0时,应用程序应注销 有些请求(POST)会重置会话计时器,有些则不会 我有一个Angular 角度2+;ngrx:机具会话计时器,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我正在构建一个带有会话倒计时的应用程序,它在登录后设置为3600 当计时器达到60时,应用程序应提醒用户延长会话。当计时器达到0时,应用程序应注销 有些请求(POST)会重置会话计时器,有些则不会 我有一个auth.reducer来处理登录、登录成功等情况,还有一个auth.effect类,我将会话持续时间设置为从服务器返回的实际持续时间 我的问题是: 我在哪里放置和启动可观察的计时器/间隔? 我有以下选择: dashboard.component auth.effects auth.serv
auth.reducer
来处理登录、登录成功等情况,还有一个auth.effect
类,我将会话持续时间设置为从服务器返回的实际持续时间
我的问题是:
计时器/间隔
?
我有以下选择:
dashboard.component
auth.effects
auth.service
递减计时器
还是在可观测对象完成倒计时时创建一个动作计时器超时
sessionSecondsLeft
计数器,该计数器每秒由递减计时器
递减一次,还是只在60处有一个属性倒计时
和倒计时
这方面的最佳做法是什么?一个
减量\u计时器
操作将每秒更新一次您的状态,并且还会垃圾邮件发送您的操作日志(如果您使用的是store devtools)
我的建议是:
创建一个动作定时器\u重置
。如果你想显示时间戳,你可以在商店里保存时间戳,但我认为在剩下不到一分钟之前你不需要它
@Effect() TIMER_RESET$ = this.actions$
.ofType(TIMER_RESET)
.switchMap(
Observable.concat(
Observable.timer(1000*60*59).map({type: TIMER_WARNING}),
Observable.timer(1000*60*1).map({type: TIMER_EXPIRED})
)
)
谢谢你的评论。我知道必须实现另一个从3600-60倒计时的计时器来调用计时器重置操作。不过我有一个问题。我该把计时器放在哪里?验证服务或仪表板组件?好的,不是。在触发
定时器重置
后,第一个可观察到的将在59分钟后发出定时器警告
,第二个将在59分钟后发出定时器过期
1分钟Observable.concat()
按顺序订阅传递的可观察项。如果之前调度了另一个TIMER\u RESET
,则这两个计时器都将被丢弃用于新的计时器。好的,我现在知道了,在登录成功或每次POST请求后,我调用TIMER\u RESET。谢谢。还不清楚谁是第一个开始。我猜是您的dashboard.component.ngOnInit()