Код Senior Реализация с нуля обновлено
Цепочка middleware
Условие
applyMiddleware(fns)(context): каждый middleware имеет вид (ctx, next) => …, вызывает next() для передачи дальше и может выполнить код после. Поддержи асинхронные middleware.
Что проверяют тесты
порядок входа и выхода
общий контекст
прерывание цепочки
двойной next - ошибка
пустая цепочка
Как подойти
Луковичная модель Koa: код до next выполняется на входе, после - на обратном пути. Реализация - рекурсивный dispatch(i), где next замкнут на i+1. Защита от двойного next нужна, потому что иначе ошибка проявится как загадочно дважды выполненный хвост цепочки. Тот же паттерн - middleware Redux и перехватчики axios.
Подсказки: 3
- Рекурсивный диспетчер по индексу - next это вызов следующего индекса.
- Оборачивай результат в Promise.resolve, чтобы синхронные middleware тоже работали.
- Повторный вызов next в одном слое надо отлавливать сравнением индексов.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.