Клиент с перехватчиками
Условие
createClient({ baseUrl, doFetch }): метод request(path, options). Перехватчики: use.request(fn) правит настройки перед отправкой, use.response(fn) правит ответ. Ошибочный статус (ok === false) превращается в исключение с полем status.
Что проверяют тесты
собирает адрес
перехватчик запроса правит настройки
перехватчик ответа правит результат
ошибочный статус бросает
перехватчики идут по порядку
отписка перехватчика
асинхронный перехватчик дожидается
Как подойти
Архитектура axios в тридцати строках. Три решения определяют удобство: перехватчик может быть асинхронным (обновление токена перед запросом), возврат undefined означает «ничего не менял», а ошибочный HTTP-статус превращается в исключение - иначе каждый вызывающий обязан помнить про проверку ok, и однажды забудет. Регистрация возвращает отписку, как и у подписок на события.
Подсказки: 3
- Перехватчики - это просто массивы функций, применяемых по цепочке.
- Дай перехватчику право вернуть undefined: тогда настройки остаются прежними.
- await работает и на синхронных перехватчиках - отдельных веток не нужно.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.