Angular 2 + ngrx:实现会话计时器

时间:2016-09-23 09:02:26

标签: angular rxjs ngrx

我正在使用会话倒计时构建一个应用程序,登录后设置为3600。

当计时器达到60时,应用程序应提醒用户延长会话。当计时器达到0时,应用程序应该注销。

某些请求(POST)会重置会话计时器,其他请求则不会。

我有auth.reducer处理登录,login_success等案例和auth.effect类,我将session-duration设置为从服务器返回的实际持续时间。

我的问题是:

  1. 我在哪里放置并启动Observable.timer/interval? 我有以下选择:

    • dashboard.component
    • auth.effects
    • auth.service
  2. 我是否创建了一个动作DECREMENT_TIMER,或者只是在Observable完成倒计时时创建一个动作TIMER_TIMEOUT

  3. 我应该如何格式化AuthState?我有一个sessionSecondsLeft计数器,每秒递减DECREMENT_TIMER或者是否更好地拥有一个属性countdown_at_60countdown_finished

  4. 最佳做法是什么?

1 个答案:

答案 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})
    )
  )