【问题标题】:Angular rxjs Observable.interval() not triggering properly on background tabs in ChromeAngular rxjs Observable.interval() 未在 Chrome 的背景选项卡上正确触发
【发布时间】:2018-01-03 05:05:31
【问题描述】:

我正在编写Angular2应用程序,间隔定时器通过RXJS可观察到实现,并且刚刚注意到观察到的奇怪行为。当标签在后台时,Chrome浏览器中的Interval()和Angeenable.timer()的奇怪行为。 Angular 组件应该每秒在控制台中打印一次秒数,但在后台选项卡上,这不能按预期工作 - 函数每 x+1 秒触发一次,其中 x 是在间隔函数中明确指定的间隔

Angular 组件代码:

ngOnInit() {
  let a = Observable.interval(1000).subscribe(() => {
    let date = new Date();
    console.log(date.getSeconds());
  });
}

示例:tab1 上的控制台输出(上面定义了计时器的选项卡):

37 <- tab1 (with timer)
38
39
40
41 <- changed tab to tab2
43
45
47
49
51
53
55
57
59 <- changed tab to tab1
0
1
2
3

Mozzila FF 没有问题。

我推测这种行为是浏览器中后台标签优先级较低的结果,但为什么间隔总是延迟一秒?

【问题讨论】:

    标签: angular timer rxjs observable angular2-observables


    【解决方案1】:

    但是,如果使用setInterval(),在任何浏览器中都没有问题。

    ngOnInit() {
    
      setInterval(()=>{
    
        console.log(new Date())
      },1000)  
    }
    

    【讨论】:

    • 确定这是一个很好的解决方法,但仍然没有解释为什么 observables 行为怪异:D
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 2011-04-18
    • 2016-08-28
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多