Выбор ответа Middle System design на фронте спрашивают часто обновлено

Гонка запросов в автодополнении

Вопрос

Пользователь быстро набирает «мос», «моск», «москва». Ответ на «мос» пришёл последним и перетёр подсказки для «москва». Что исправит проблему надёжно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Отменять старый запрос или игнорировать неактуальные ответы. Причина в том, что ответы приходят не в порядке отправки.

Варианты ответа

  1. Увеличить дебаунс до 2 секунд, чтобы запросы не пересекались
  2. Кешировать ответы в localStorage и показывать из кеша
  3. Отправлять запросы последовательно, по одному за раз
  4. Отменять старый запрос или игнорировать неактуальные ответыправильный ответ

Разбор

Причина в том, что ответы приходят не в порядке отправки. Надёжное решение: при новом вводе отменять старый запрос (AbortController) или сверять, что ответ относится к текущей строке. Дебаунс уменьшает число запросов, но гонку не исключает. Кеш не решает порядок. Последовательные запросы медленные и всё равно покажут устаревшее, пока очередь не дойдёт.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.