Код Middle Тестирование обновлено

Повтор запроса с экспоненциальной задержкой

Условие

Напишите retry(fn, { retries, baseMs }): вызывает асинхронную fn(attempt) (номер попытки с 0). При ошибке ждёт baseMs * 2 ** attempt мс и пробует снова, всего не больше retries + 1 попыток. Если ошибка имеет err.retryable === false, сразу пробрасывает её без повторов. Если все попытки неудачны, пробрасывает последнюю ошибку. Возвращает результат первой успешной попытки.

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

  • успех с первой попытки

  • успех после двух ошибок

  • все попытки неудачны

  • retries 0 значит одна попытка

  • неповторяемая ошибка сразу

  • экспоненциальные задержки

  • нет паузы после последней попытки

Как подойти

Подсказки: 2
  1. Цикл по attempt от 0 до retries включительно.
  2. Ждите только между попытками, после последней сразу пробрасывайте ошибку.

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

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