BACK
Уроки20. debounceTime: подождать тишину
Уроки · 20

20. debounceTime: подождать тишину

debounceTime — подождать тишину

Это один из самых полезных операторов в RxJS. debounceTime(ms) работает так: получив значение, он не пропускает его сразу, а ждёт указанный период. Если в это время приходит новое значение — старое отбрасывается, а ожидание стартует заново. Дальше проходит только то значение, после которого была пауза.

'r' → 'rx' → 'rxjs' [пауза] → debounceTime(30) → пропускает только 'rxjs'

Где применяется

  • Поиск: не дергать сервер на каждую букву.
  • Автосохранение: ждать паузы в наборе, потом сохранять.
  • Валидация формы: показывать ошибки после того, как пользователь перестал печатать.
  • Resize/scroll: не пересчитывать на каждый пиксель.

Глоссарий

  • Debounce (англ. «дребезг», как у клавиш) — техника «гашения» частых сигналов: проходит только последний после паузы.
  • hot Observable — поток, который «работает» сам по себе, как поток реальных событий (например, кликов). Marble-функция hot(...) позволяет симулировать такой поток в тестах.

Что нужно сделать

  1. В функции createSearch$ внутри pipe добавьте debounceTime(30).
  2. Marble-проверка симулирует быстрый ввод r → rx → rxjs, после которого идёт пауза 40мс. Только rxjs должен пройти.

Детерминированная проверка

В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.

Решение spoiler · click to reveal
const { debounceTime } = Rx;

function createSearch$(input$) {
  return input$.pipe(
    debounceTime(30)
  );
}
script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...