RxJS 5.0 中的时间戳

Timestamp in RxJS 5.0

在 RxJS 4.0 中我可以做如下事情:

let clicks = Observable.fromEvent(board.canvas, 'click'),
    keydowns = Observable.fromEvent(document, 'keydown')
      .filter((e) => e.keyCode === 32);
  return Observable
    .merge(clicks, keydowns)
    .sample(200).
    .timestamp();

Now that RxJS 5.0 dropped support for timestamp,请问这段代码在迁移中是如何完成的?

我们可以通过映射一些源 Observable 来相当容易地重新创建此行为:

function timestamp(source) {
    return source.map(value => ({ value, timestamp: Date.now() }));
}

在您的代码中:

let clicks = Observable.fromEvent(board.canvas, 'click');
let keydowns = Observable.fromEvent(document, 'keydown')
      .filter((e) => e.keyCode === 32);

let clicksAndKeydowns = Observable
    .merge(clicks, keydowns)
    .sample(200);

return timestamp(clicksAndKeydowns);

对于未来的读者 - .timestamp() 已在 RxJS 5.0 中重新实现(在 beta.4 (2016-03-29) 中)。

变更日志位于:https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md