我正在使用会话倒计时构建一个应用程序,登录后设置为3600。
当计时器达到60时,应用程序应提醒用户延长会话。当计时器达到0时,应用程序应该注销。
某些请求(POST)会重置会话计时器,其他请求则不会。
我有auth.reducer
处理登录,login_success等案例和auth.effect
类,我将session-duration设置为从服务器返回的实际持续时间。
我的问题是:
我在哪里放置并启动Observable.timer/interval
?
我有以下选择:
dashboard.component
auth.effects
auth.service
我是否创建了一个动作DECREMENT_TIMER
,或者只是在Observable完成倒计时时创建一个动作TIMER_TIMEOUT
?
我应该如何格式化AuthState?我有一个sessionSecondsLeft
计数器,每秒递减DECREMENT_TIMER
或者是否更好地拥有一个属性countdown_at_60
和countdown_finished
?
最佳做法是什么?
答案 0 :(得分:3)
DECREMENT_TIMER
操作会每秒更新您的状态一次,并且还会垃圾邮件您的操作日志(如果您使用存储开发工具)
我的建议:
制作动作TIMER_RESET
。您可以在商店中保存时间戳,如果您想要显示它,但我不认为您需要它,直到还有不到一分钟的时间。
@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})
)
)