Ограничение времени выполнения
Условие
asyncLimit(fn, delay) возвращает новую версию асинхронной функции: если исходная не успела за delay мс, результат отклоняется строкой 'Превышен лимит времени исполнения'. Аргументы прокидываются, успевший результат возвращается как есть.
Что проверяют тесты
успел
не успел
несколько аргументов
таймер снимается после успеха
ошибка исходной функции пробрасывается
Как подойти
Promise.race в чистом виде. Две детали отличают рабочее решение от учебного: clearTimeout в finally (иначе висящий таймер держит цикл событий и мешает завершению процесса) и отсутствие подмены ошибок - исключение внутри fn должно доходить до вызывающего как есть. Важно проговорить: гонка не останавливает саму функцию, она продолжает выполняться; для настоящей отмены нужен AbortController.
Подсказки: 3
- Гонка двух промисов: результат и таймер.
- Таймер надо снимать после завершения, иначе он держит процесс.
- Ошибка самой функции не должна подменяться сообщением о таймауте.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.