Rxjs 无漂移的可观测间隔

Rxjs 无漂移的可观测间隔,rxjs,Rxjs,我正在使用Observable.interval计划在指定时间执行代码: let obs = Observable.interval(50).subscribe(()=>{ console.log(this.currentFrame+" "+new Date().getTime()); this.currentFrame++ }); 这是输出。正如你所看到的,经过6次迭代,我已经有了10毫秒的漂移。如何使用Observable.interval,但同时指定它需要根据当前漂移重新

我正在使用Observable.interval计划在指定时间执行代码:

let obs =  Observable.interval(50).subscribe(()=>{
  console.log(this.currentFrame+" "+new Date().getTime());
  this.currentFrame++
});
这是输出。正如你所看到的,经过6次迭代,我已经有了10毫秒的漂移。如何使用Observable.interval,但同时指定它需要根据当前漂移重新计算下一次迭代

 0 1513972329849
 1 1513972329901
 2 1513972329952
 3 1513972330004
 4 1513972330057
 5 1513972330110

在@cartant的修复方案被认可之前,您可以自己使用并创建该行为。假设
delay
始终向前漂移,请尝试以下操作:

function correcting_interval(interval) {
  const start_time = new Date().getTime();
  return Observable.of(-1)
                   .expand(v => Observable.of(v + 1).delay(interval - (new Date().getTime() - start_time) % interval))
                   .skip(1);
}

查看哪个被还原,因为它暴露在Angular的Zone.js中。实际上,Zone.js错误与PR相关,但该错误不会影响导致PR还原的错误。如果有人感兴趣,有一个解释。