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

Ограничение времени выполнения

Условие

asyncLimit(fn, delay) возвращает новую версию асинхронной функции: если исходная не успела за delay мс, результат отклоняется строкой 'Превышен лимит времени исполнения'. Аргументы прокидываются, успевший результат возвращается как есть.

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

  • успел

  • не успел

  • несколько аргументов

  • таймер снимается после успеха

  • ошибка исходной функции пробрасывается

Как подойти

Promise.race в чистом виде. Две детали отличают рабочее решение от учебного: clearTimeout в finally (иначе висящий таймер держит цикл событий и мешает завершению процесса) и отсутствие подмены ошибок - исключение внутри fn должно доходить до вызывающего как есть. Важно проговорить: гонка не останавливает саму функцию, она продолжает выполняться; для настоящей отмены нужен AbortController.

Подсказки: 3
  1. Гонка двух промисов: результат и таймер.
  2. Таймер надо снимать после завершения, иначе он держит процесс.
  3. Ошибка самой функции не должна подменяться сообщением о таймауте.

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

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