Angular中的rxjs Observable.interval()在Chrome后台选项卡中未正确触发。

7
我将尽力为您翻译。这是一个关于使用RxJs observables实现间隔定时器的angular2应用程序的问题。在Chrome浏览器中,当标签页在后台时,Observable.interval()和Observable.timer()会表现出奇怪的行为。Angular组件每秒钟应该在控制台打印秒数,但在后台标签页中,这并没有按预期工作-函数会在x+1秒触发一次,其中x是显式指定的间隔函数的间隔时间。下面是需要翻译的内容:

Angular组件代码:

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

例子:在标签页1上的控制台输出(与上述定时器定义的标签页):

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

火狐浏览器没有问题。

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

1个回答

4

然而,如果使用setInterval()函数,任何浏览器都不会有问题。

ngOnInit() {

  setInterval(()=>{

    console.log(new Date())
  },1000)  
}

3
当然,这是一个不错的解决方法,但仍然没有解释为什么可观察对象的行为很奇怪 :D - Nicolas Gehlert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接