我正在使用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发布于 2017-12-23 22:48:37
在@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);
}https://stackoverflow.com/questions/47946750
复制相似问题