Уроки49. Project: typeahead search
Уроки · 49
49. Project: typeahead search
Проект 1 — поле живого поиска
Это первый из «проектных» уроков. Все операторы, которые в нём нужны, вы уже знаете по отдельности. Сейчас задача — собрать их в производственный паттерн typeahead-поиска.
Три «защитных слоя»
debounceTime(20)— не дёргаем сервер, пока пользователь печатает. Запрос полетит только после паузы.distinctUntilChanged()— если значение не изменилось (например, символ удалили и сразу добавили), повторный запрос не нужен.switchMap(searchApi)— если пришёл новый запрос, пока старый ещё выполняется, старый отменяется.
query$.pipe(
debounceTime(20),
distinctUntilChanged(),
switchMap(q => searchApi(q))
)
Что нужно сделать
- В функции
createTypeahead$внутриpipeдобавьте три оператора по порядку:debounceTime(20),distinctUntilChanged(),switchMap(query => searchApi(query)). - Не забудьте про запятые!
Детерминированная проверка
В этой задаче проверка идет через виртуальное время TestScheduler. Если решение верное, в консоли появится только Test Passed!. Не добавляйте лишние console.log, иначе проверка провалится.
Решение spoiler · click to reveal
const { debounceTime, distinctUntilChanged, switchMap } = Rx;
function createTypeahead$(query$, searchApi) {
return query$.pipe(
debounceTime(20),
distinctUntilChanged(),
switchMap(query => searchApi(query))
);
} script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...