Уроки20. debounceTime: подождать тишину
Уроки · 20
20. debounceTime: подождать тишину
debounceTime — подождать тишину
Это один из самых полезных операторов в RxJS. debounceTime(ms) работает так: получив значение, он не пропускает его сразу, а ждёт указанный период. Если в это время приходит новое значение — старое отбрасывается, а ожидание стартует заново. Дальше проходит только то значение, после которого была пауза.
'r' → 'rx' → 'rxjs' [пауза] → debounceTime(30) → пропускает только 'rxjs'
Где применяется
- Поиск: не дергать сервер на каждую букву.
- Автосохранение: ждать паузы в наборе, потом сохранять.
- Валидация формы: показывать ошибки после того, как пользователь перестал печатать.
- Resize/scroll: не пересчитывать на каждый пиксель.
Глоссарий
- Debounce (англ. «дребезг», как у клавиш) — техника «гашения» частых сигналов: проходит только последний после паузы.
- hot Observable — поток, который «работает» сам по себе, как поток реальных событий (например, кликов). Marble-функция
hot(...)позволяет симулировать такой поток в тестах.
Что нужно сделать
- В функции
createSearch$внутриpipeдобавьтеdebounceTime(30). - 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
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...