> Как реализовать функцию retry для повторного вызова асинхронной функции при ошибке в JavaScript (JavaScript)

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

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

Стек: JavaScript

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

Для реализации функции retry для асинхронных функций в JavaScript можно использовать рекурсию с обработкой промисов. Вот пример:

JAVASCRIPT
async 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));

Эта функция принимает асинхронную функцию, максимальное количество попыток и задержку между ними. Она повторяет вызов до успеха или исчерпания попыток, с экспоненциальной задержкой (можно модифицировать). Для более продвинутого сценария можно добавить проверку типов ошибок или динамическую задержку.

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

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