考虑此代码
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))
对于这样一个简单的任务,这是很多代码。
答案 0 :(得分:0)
您可以使用takeUntil
和last
:
interval(10_000).pipe(
takeUntil(fromEvent(document, 'click')),
last()
)