Уроки21. Поиск: debounceTime + distinctUntilChanged
Уроки · 21
21. Поиск: debounceTime + distinctUntilChanged
Классическая комбинация для поиска
Это первый практический «рецепт» курса. Сама по себе ни одна из двух «защит» не справляется с задачей живого поиска:
- Без
debounceTimeзапрос полетит на каждую букву. - Без
distinctUntilChangedповторный набор одного и того же текста (например, после очистки и нового ввода) даст лишний запрос.
Почему такой порядок
Обычно ставят debounceTime раньше distinctUntilChanged. Логика: сначала «успокоить» поток (отсечь промежуточные значения во время быстрого набора), потом уже сравнить стабильное значение с предыдущим стабильным.
input$.pipe(
debounceTime(30),
distinctUntilChanged()
)
Что нужно сделать
- В функции
createQuery$внутриpipeсначалаdebounceTime(30), через запятуюdistinctUntilChanged(). - Marble симулирует ввод:
ang → angular, потом сноваangular(дубль, должен быть отброшен), потомrxjs. - Ожидаемый выход: только
angularиrxjs.
Детерминированная проверка
В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.
Решение spoiler · click to reveal
const { debounceTime, distinctUntilChanged } = Rx;
function createQuery$(input$) {
return input$.pipe(
debounceTime(30),
distinctUntilChanged()
);
} script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...