RxJS repeatWhen () с незавершенной наблюдаемой - PullRequest
0 голосов
/ 15 мая 2019

Рассмотрим этот код

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 голосов
/ 15 мая 2019

Вы можете использовать takeUntil и last:

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