Отложенный вызов функции (debounce)

Сохраняйте один ID таймера. Каждый onChange отменяет прежний вызов и планирует fetchData с последним значением через 1000 мс тишины.

Короткий ответ

Что ответить на собеседовании

Сохраняйте один ID таймера. Каждый onChange отменяет прежний вызов и планирует fetchData с последним значением через 1000 мс тишины.

Подробный разбор

Ответ с пояснениями

Условие

Текстовый поиск, имитирующий работу с бекендом. Мы реагируем на каждую вводимую букву, однако запрос к серверу (функция fetchData) должен отправляться только после паузы ввода не менее 1 секунды.

  • Нельзя использовать сторонние библиотеки, всё реализуется на чистом JavaScript.
  • Не требуется создавать HTML‑форму, достаточно обработать условный вызов onChange(value).
  • Не использовать React и связанные с ним окружения.
// пример сигнатуры функции, которую нужно вызвать после паузы
function fetchData(query) {
    // имитация обращения к API
    console.log('Запрос к API с параметром:', query);
}

Ответ

Сохраняйте один ID таймера. Каждый onChange отменяет прежний вызов и планирует fetchData с последним значением через 1000 мс тишины.

let timer;
function onChange(value) {
  clearTimeout(timer);
  timer = setTimeout(() => {
    timer = undefined;
    fetchData(value);
  }, 1000);
}

HTML и React не нужны. Таймер закрывает именно value текущего вызова; отменённые таймеры не выполняются. При непрерывном вводе запрос откладывается неограниченно — это debounce, не throttle. Уже отправленный запрос clearTimeout не отменяет; если он настоящий, для защиты от устаревших ответов нужен отдельный AbortController или номер запроса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее