我正在编写 angular2 应用程序,其中包含通过 RxJs 可观察量实现的间隔计时器,并且刚刚注意到 Chrome 浏览器中 Observable.interval(( 和 Observable.timer(( 在选项卡处于后台时的奇怪行为。 Angular 组件应该每秒在控制台中打印一次秒数,但在后台选项卡上,这没有按预期工作 - 函数每 x+1 秒触发一次,其中 x 是在间隔函数中明确指定的间隔
角度组件代码:
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
Mozzila FF没有问题。
我认为这种行为是由于浏览器中后台选项卡的优先级较低,但为什么间隔总是推迟一秒?
但是,如果使用setInterval()
,则在任何浏览器中都没有问题。
ngOnInit() {
setInterval(()=>{
console.log(new Date())
},1000)
}