> Как реализовать функцию retry для повторного вызова асинхронной функции при ошибке в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для реализации функции retry для асинхронных функций в JavaScript можно использовать рекурсию с обработкой промисов. Вот пример:
JAVASCRIPTasync function retry(asyncFn, maxAttempts = 3, delay = 1000) {for (let attempt = 1; attempt <= maxAttempts; attempt++) {try {return await asyncFn();} catch (error) {if (attempt === maxAttempts) {throw new Error(`All ${maxAttempts} attempts failed: ${error.message}`);}console.warn(`Attempt ${attempt} failed. Retrying in ${delay}ms...`);await new Promise(resolve => setTimeout(resolve, delay));}}}// Пример использования:const fetchData = async () => {const response = await fetch('https://api.example.com/data');if (!response.ok) throw new Error('Network error');return response.json();};retry(fetchData, 5, 2000).then(data => console.log('Success:', data)).catch(err => console.error('Failed:', err));
Эта функция принимает асинхронную функцию, максимальное количество попыток и задержку между ними. Она повторяет вызов до успеха или исчерпания попыток, с экспоненциальной задержкой (можно модифицировать). Для более продвинутого сценария можно добавить проверку типов ошибок или динамическую задержку.
> Похожие задачи по frontend
Как отфильтровать строку, чтобы оставить только буквы с помощью регулярных выражений в JavaScript
Как обрабатывать дублирующиеся ключи при преобразовании массива объектов в объект в JavaScript
Как реализовать мемоизацию функции в JavaScript
Реализовать функцию, принимающую массив промисов и возвращающую массив результатов или первый reject в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью