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

Цепочка middleware

Условие

applyMiddleware(fns)(context): каждый middleware имеет вид (ctx, next) => …, вызывает next() для передачи дальше и может выполнить код после. Поддержи асинхронные middleware.

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

  • порядок входа и выхода

  • общий контекст

  • прерывание цепочки

  • двойной next - ошибка

  • пустая цепочка

Как подойти

Луковичная модель Koa: код до next выполняется на входе, после - на обратном пути. Реализация - рекурсивный dispatch(i), где next замкнут на i+1. Защита от двойного next нужна, потому что иначе ошибка проявится как загадочно дважды выполненный хвост цепочки. Тот же паттерн - middleware Redux и перехватчики axios.

Подсказки: 3
  1. Рекурсивный диспетчер по индексу - next это вызов следующего индекса.
  2. Оборачивай результат в Promise.resolve, чтобы синхронные middleware тоже работали.
  3. Повторный вызов next в одном слое надо отлавливать сравнением индексов.

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

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