Код Senior Реализация с нуля обновлено

Клиент с перехватчиками

Условие

createClient({ baseUrl, doFetch }): метод request(path, options). Перехватчики: use.request(fn) правит настройки перед отправкой, use.response(fn) правит ответ. Ошибочный статус (ok === false) превращается в исключение с полем status.

Что проверяют тесты

  • собирает адрес

  • перехватчик запроса правит настройки

  • перехватчик ответа правит результат

  • ошибочный статус бросает

  • перехватчики идут по порядку

  • отписка перехватчика

  • асинхронный перехватчик дожидается

Как подойти

Архитектура axios в тридцати строках. Три решения определяют удобство: перехватчик может быть асинхронным (обновление токена перед запросом), возврат undefined означает «ничего не менял», а ошибочный HTTP-статус превращается в исключение - иначе каждый вызывающий обязан помнить про проверку ok, и однажды забудет. Регистрация возвращает отписку, как и у подписок на события.

Подсказки: 3
  1. Перехватчики - это просто массивы функций, применяемых по цепочке.
  2. Дай перехватчику право вернуть undefined: тогда настройки остаются прежними.
  3. await работает и на синхронных перехватчиках - отдельных веток не нужно.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.