Рассмотрим этот код
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))
Это многокод для такой простой задачи.