Code Lab

Повтор при ошибке

ЛёгкаяАсинхронный код5 мин

Напиши функцию retry(fn). Она вызывает асинхронную функцию fn без аргументов. Если промис от fn отклонён, вызови fn ещё раз. Всего попыток не больше трёх.

retry возвращает промис с результатом первой удачной попытки. Если все три попытки неудачны, верни промис, отклонённый с ошибкой последней попытки.

Примеры

await retry(() => Promise.resolve('ok'))

Вернёт 'ok'

Первая попытка удачна, повтор не нужен.
await retry(() => Promise.reject(new Error('down'))).catch((e) => e.message)

Вернёт 'down'

Три попытки неудачны, и наружу выходит последняя ошибка.

Источник

Загружаем редактор...
  1. Удача с первой попытки, fn вызвана один раз
  2. Две ошибки, потом удача
  3. Три ошибки, наружу выходит последняя

Скрытые тесты запускаются по Submit.