В RxJS или Redux Observable debounceTime также действует как задержка - PullRequest
0 голосов
/ 03 мая 2018

При щелчке пользователя я хочу, чтобы значок отображался в течение 3 секунд (то есть значок должен автоматически скрываться через 3 секунды). Я также хочу, чтобы только одно действие SHOW_BADGE регистрировалось, пока значок не будет скрыт. Я думаю, что для этого хорошо использовать debounceTime, однако время, когда скрытие стало несовместимым, когда я нажимаю несколько раз.

Увеличивает ли debounceTime задержку? Является ли debounceTime задержкой в ​​себе? Как бы я исправить приведенный ниже пример, чтобы получить то, что я хочу?

export const badgeEpic = action$ =>
  action$.ofType('SHOW_BADGE')
   .pipe(
      debounceTime(3000),
      delay(3000),
      mapTo({ type: 'HIDE_BADGE' })
    );

Как предполагает кто-то в комментариях ниже, AuditTime решает эту конкретную проблему. Вот окончательный код для значка эпоса.

export const badgeEpic = action$ =>
  action$.pipe(
    ofType('SHOW_BADGE'),
    auditTime(3000),
    mapTo({ type: 'HIDE_BADGE' })
  );

1 Ответ

0 голосов
/ 03 мая 2018

Если это то, что вы делаете, вы можете делать это каждый раз, когда SHOW_BADGE приходит до истечения времени задержки, предыдущий эпос отменяется сам. Таким образом, HIDE_BADGE всегда будет вызываться через 3 секунды после последнего щелчка:

export const badgeEpic = action$ =>
  actions$.pipe(
    ofType('SHOW_BADGE'),
    switchMap(() =>
      of(({ type: 'HIDE_BADGE' })).pipe(
        delay(3000),
        takeUntil(action$.ofType('SHOW_BADGE')),
      )),
  )

Как указал @Yoshi, takeUntil может не потребоваться, поскольку switchMap отменяет ранее запущенную внутреннюю наблюдаемую.

...