RxJS repeatWhen()具有不完整的可观察到的

时间:2019-05-15 17:25:14

标签: rxjs rxjs6 rxjs-pipeable-operators

考虑此代码

interval(10_000)
  .subscribe(value => console.log(value))

当另一个可观察对象发出时,我想使此可观察对象发出最新的值。我可以使用repeatWhen来做到这一点:

interval(10_000)
  .pipe(
    repeatWhen(() => fromEvent(document, 'click')),
  )
  .subscribe(value => console.log(value))

但是repeatWhen仅在原始可观察值完成后才发射。

我需要这个:

interval(10_000)
  .pipe(
    // I need this operator
    EMIT_LATEST_WHEN(fromEvent(document, 'click')),
  )
  .subscribe(value => console.log(value))

上面的代码表示我想在单击文档时再次发出interval的最新值。

我目前的解决方法是:

let cachedValue
const a$ = interval(10_000).pipe(
  tap(value => cachedValue = value),
)

const b$ = fromEvent(document, 'click')

merge(a$, b$)
  .pipe(map(() => cachedValue))
  .subscribe(value => console.log(value))

对于这样一个简单的任务,这是很多代码。

1 个答案:

答案 0 :(得分:0)

您可以使用takeUntillast

interval(10_000).pipe(
  takeUntil(fromEvent(document, 'click')),
  last()
)