创建一个定期发出值的observable(错误:observer.timer不是函数)

时间:2017-08-17 15:34:36

标签: rxjs observable angular2-observables

我有一个看起来像这样的对象:[{ 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时间戳之间的差异,以秒为单位。现在,我想在两个时间戳之间的差异中发出它。

1 个答案:

答案 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]);