Декоратор повторных попыток

Medium
PromiseAsyncError HandlingOzon

Реализуйте функцию retry(fn, retries, delay), которая:

  1. Вызывает асинхронную функцию fn
  2. Если fn бросает ошибку — повторяет вызов до retries раз с паузой delay мс
  3. Если все попытки неудачны — реджектится с последней ошибкой
let attempt = 0;
const flaky = () => {
  attempt++;
  if (attempt < 3) throw new Error("fail");
  return "ok";
};
await retry(flaky, 3, 100); // => "ok"
Подсказка

Используйте цикл for от 0 до retries включительно. В блоке catch — если это последняя итерация, пробрасывайте ошибку (throw err). Иначе await задержку через new Promise(r => setTimeout(r, delay)).

Подсказка

Что ещё могут спросить: реализовать retryWithBackoff — каждая следующая попытка ждёт в 2× дольше. Или добавить shouldRetry(err) — колбэк, который решает, стоит ли повторять именно эту ошибку.

Ваш код - JavaScript
Результаты
Нажмите «Запуск» для выполнения кода