可观察的间隔没有漂移

时间:2017-12-22 19:57:17

标签: rxjs

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

let obs =  Observable.interval(50).subscribe(()=>{
  console.log(this.currentFrame+" "+new Date().getTime());
  this.currentFrame++
});

这是输出。如您所见,经过6次迭代后,我已经有10ms漂移。我如何使用Observable.interval,还指定它需要根据当前漂移重新计算下一次迭代?

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

1 个答案:

答案 0 :(得分:1)

在@ cartant的修复被取消之前,您可以使用expand并自己创建行为。假设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);
}