我有一个看起来像这样的对象:[{ timestamp: object }]
timestamp
已创建timestamp = Date.now();
现在,我正在寻找一种方法来创建一个Observable
来发送实际序列中的对象,即当条目之间的时间是200ms然后它需要等待200ms,如果它是2.5秒然后它需要等待2500ms。
我通过相互减去两个相邻的索引值来获得差异。
我的代码在这里:
startReplay() {
this.recordingRunning = true;
const replayValues = this.recordedListeningValues;
this.formObservable = Observable.create(function(observer) {
let lastTs;
Object.keys(replayValues).forEach(function(key) {
observer.timer(Math.floor((Number(key) - lastTs) / 1000)).next(key, lastTs);
lastTs = Number(key);
});
});
var source = this.formObservable.subscribe(x => console.log(x));
}
它会抛出错误:observer.timer is not a function
目前,我只是试图log
时间戳之间的差异,以秒为单位。现在,我想在两个时间戳之间的差异中发出它。
答案 0 :(得分:1)
您可以使用delayWhen运算符。但您需要知道录制开始的时间戳,以便计算每个事件相对于录制开始的时间
const startOfRecording = ??? // Date.now() when recording started
const recordedValues = ???
// each time someone subscribes to this observable
// the recorded events will play back in "real time"
this.formObservable = Observable
.from(Object.keys(replayValues))
.delayWhen(key => Observable.timer(key - startOfRecording))
.map(key => replayValues[key]);