Вопрос проверяет понимание реализации механизма повторных попыток (retry) для асинхронных операций с задержкой, что необходимо для создания отказоустойчивых приложений.
Механизм повторных попыток (retry) позволяет автоматически перезапускать асинхронную операцию при возникновении ошибки. Задержка между попытками предотвращает перегрузку системы и увеличивает шансы на успех при временных проблемах.
Функция принимает асинхронную операцию, максимальное количество попыток и задержку в миллисекундах. При ошибке она ждет указанное время и рекурсивно вызывает себя с уменьшенным счетчиком попыток.
async function retryWithDelay(fn, maxAttempts, delay) {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
return await fn();
} catch (error) {
if (attempt === maxAttempts) throw error;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}Предположим, у нас есть функция запроса к API, которая иногда падает с ошибкой 503. Используя retryWithDelay, мы можем автоматически повторить запрос через 1 секунду.
async function fetchData() {
const response = await fetch('/api/data');
if (!response.ok) throw new Error('Server error');
return response.json();
}
retryWithDelay(fetchData, 3, 1000)
.then(data => console.log(data))
.catch(err => console.error('Failed after 3 attempts', err));Вывод: Используйте retry с задержкой для повышения отказоустойчивости приложений, особенно при работе с ненадежными внешними сервисами или временными сбоями.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию