Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2+;ngrx:机具会话计时器_Angular_Rxjs_Ngrx - Fatal编程技术网

Angular 角度2+;ngrx:机具会话计时器

Angular 角度2+;ngrx:机具会话计时器,angular,rxjs,ngrx,Angular,Rxjs,Ngrx,我正在构建一个带有会话倒计时的应用程序,它在登录后设置为3600 当计时器达到60时,应用程序应提醒用户延长会话。当计时器达到0时,应用程序应注销 有些请求(POST)会重置会话计时器,有些则不会 我有一个auth.reducer来处理登录、登录成功等情况,还有一个auth.effect类,我将会话持续时间设置为从服务器返回的实际持续时间 我的问题是: 我在哪里放置和启动可观察的计时器/间隔? 我有以下选择: dashboard.component auth.effects auth.serv

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

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

有些请求(POST)会重置会话计时器,有些则不会

我有一个
auth.reducer
来处理登录、登录成功等情况,还有一个
auth.effect
类,我将会话持续时间设置为从服务器返回的实际持续时间

我的问题是:

  • 我在哪里放置和启动可观察的
    计时器/间隔
    ? 我有以下选择:

    • dashboard.component
    • auth.effects
    • auth.service
  • 我是创建一个动作
    递减计时器
    还是在可观测对象完成倒计时时创建一个动作
    计时器超时

  • 我应该如何格式化AuthState?我是否有一个
    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()