RxJS:如何将两个流合并为一个以一个流的速率触发事件,但使用其他流的最新值?

时间:2017-01-21 23:57:14

标签: rxjs

我是RX的新手。这是我想要解决的问题的简单模型。它看起来很简单,但我很难找到合适的操作符(或以其他方式操纵流)来解决它。

所以我们假设我们有两个流。一个人经常发光;另一个远不那么。我们希望每当第二个observable发出一个值时,取出该点另一个可观察者发出的最新值,并用它做一些事情。

非工作示例:

let stream1 = Rx.Observable
    .interval(100);

let stream2 = Rx.Observable
    .interval(2000)
  .combineLatest(stream1, (stream2Value, stream1Value) => stream1Value)
  .do((stream1Value) => console.log('value:', stream1Value));

stream2.subscribe();

上述代码段的问题是它会等到stream2的第一个发出值然后开始以stream1的频率发出事件流。我想要的是获得一个以stream2的速率触发事件的流,但是会在stream2触发时发出stream1发出的最新值。这听起来好像我需要stream1成为一个行为主题,以便我可以在stream2触发时访问它的最后一个值......但也许有一个更简单的解决方案?

1 个答案:

答案 0 :(得分:9)

您可以使用withLatestFrom执行此操作:



let stream1 = Rx.Observable
  .interval(100);

let stream2 = Rx.Observable
  .interval(2000)
  .withLatestFrom(stream1, (stream2Value, stream1Value) => stream1Value)
  .do((stream1Value) => console.log("value:", stream1Value));

stream2.subscribe();

<script src="https://npmcdn.com/@reactivex/rxjs@5.0.3/dist/global/Rx.min.js"></script>
&#13;
&#13;
&#13;

此外,根据您的使用情况,您可能会发现auditTime运算符很有用。