我正在使用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
答案 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);
}