> Как рекурсивно проверять условие повторных запросов с учётом счётчика попыток в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

Для рекурсивной проверки условия с учётом счётчика попыток можно реализовать функцию, которая вызывает саму себя с уменьшенным счётчиком и проверяет условие на каждом шаге. Вот пример:

JAVASCRIPT
function 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.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью