RxJS 5:在保持最新值的同时跳过套接字提要

RxJS 5: skipping socket feed while keeping latest values

我一直在努力想出针对特定情况的 Rx 策略。我希望有人能给我指出正确的方向。

基本上,我有一个套接字提要,我想根据布尔值跳过它。当流跳过套接字时,我需要保留从套接字发送的最新值的 运行 缓冲区。

一旦我不再跳过套接字事件,然后将跳过时发出的最后一个值下推到流中,但仅在另一个条件(bool)下,然后重新开始监听套接字事件

所以基本上:

没走多远,但这就是我所拥有的:

Rx.Observable.interval(1000)
.skipWhile(()=>isSkipping)
.bufferWhileSkipping??
.applySkippedValuesAfterSkipping(ifisReapply)??
.subscribe(val=>console.log(val));

也许 skipWhile 不是正确的方法,但却是唯一一种有意义的方法……

你可以像下面那样做(我假设你的 isSkipping 可以是一个 Observable):

const isSkipping = new BehaviorSubject(false);

Observable.interval(100)
  .take(20)
  .window(isSkipping)
  .withLatestFrom(isSkipping)
  .switchMap(([observable, skipping]) => skipping
    ? observable.takeLast(1).map(val => 'last:' + val)
    : observable)
  .subscribe(console.log);

setTimeout(() => isSkipping.next(true), 500);
setTimeout(() => isSkipping.next(false), 1050);
setTimeout(() => isSkipping.next(true), 1500);
setTimeout(() => isSkipping.next(false), 1850);

每次 isSkipping 发出一个值时,window 运算符创建一个新的 Observable,当跳过设置为 [=16= 时,它只重新发出所有内容或链接 .takeLast(1) 运算符].

上面的示例将以下输出打印到控制台:

0
1
2
3
last:9
10
11
12
13
last:16
17
18
19