> Как рекурсивно проверять условие повторных запросов с учётом счётчика попыток в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для рекурсивной проверки условия с учётом счётчика попыток можно реализовать функцию, которая вызывает саму себя с уменьшенным счётчиком и проверяет условие на каждом шаге. Вот пример:
JAVASCRIPTfunction retryWithCondition(conditionFn, maxAttempts, delay = 1000) {return new Promise((resolve, reject) => {const attempt = (remaining) => {if (remaining <= 0) {reject(new Error('Превышено количество попыток'));return;}conditionFn().then(result => {if (result) {resolve(result);} else {console.log(`Попытка ${maxAttempts - remaining + 1} не удалась, осталось ${remaining - 1}`);setTimeout(() => attempt(remaining - 1), delay);}}).catch(error => {console.error(`Ошибка на попытке ${maxAttempts - remaining + 1}:`, error);setTimeout(() => attempt(remaining - 1), delay);});};attempt(maxAttempts);});}// Пример использования:async function checkData() {return Math.random() > 0.7; // имитация условия}retryWithCondition(checkData, 5, 500).then(data => console.log('Успех:', data)).catch(err => console.error('Ошибка:', err.message));
Здесь conditionFn - асинхронная функция, возвращающая true при выполнении условия. Рекурсия реализована через внутреннюю функцию attempt, которая на каждом шаге уменьшает счётчик remaining. При достижении нуля или успешном выполнении рекурсия завершается. Задержка между попытками реализована через setTimeout.
> Похожие задачи по frontend
Блокируется ли поток при выполнении асинхронного кода после синхронного в JavaScript
Что делать в функции каррирования в JavaScript при получении достаточного количества аргументов
Как реализовать обработку клика на любой div внутри root и выводить в консоль только id этого div в JavaScript
Почему var всплывает и что происходит при всплытии в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью