Retry Function
Retry Function - Explanation
Problem Summary
Write a function that retries an async function up to n times before failing.
Go to Problem →Detailed Explanation
이 문제는 **에러 복구 패턴**과 **비동기 재시도 로직**을 학습합니다. 네트워크 요청의 안정성을 높이는 데 필수적입니다. **재시도가 필요한 이유** 네트워크 요청은 일시적 오류로 실패할 수 있습니다. 바로 포기하지 않고 몇 번 재시도하면 성공할 수 있습니다. **알고리즘 동작** 1. 함수 실행 시도 2. 성공하면 결과 반환 3. 실패하면: - 남은 시도가 있으면 다시 시도 - 마지막 시도였으면 에러 던지기 **코드 분석** ```javascript for (let i = 0; i < times; i++) { try { return await fn(); // 성공하면 즉시 반환 } catch (e) { if (i === times - 1) throw e; // 마지막이면 에러 던지기 } } ``` **3번 시도 예시** - 시도 1: 실패 → i=0, times-1=2, 계속 - 시도 2: 실패 → i=1, times-1=2, 계속 - 시도 3: 실패 → i=2, times-1=2, 에러 던지기 **지연 추가 (확장)** ```javascript catch (e) { if (i === times - 1) throw e; await delay(1000 * (i + 1)); // 지수 백오프 } ``` **실용적 활용** - API 호출 실패 시 재시도 - 데이터베이스 연결 재시도 - 파일 업로드 재시도
Solution Code
async function retry(fn, times) {
for (let i = 0; i < times; i++) {
try {
return await fn();
} catch (e) {
if (i === times - 1) throw e;
}
}
}Key Concepts from This Problem
Common Mistakes
Hints
Complexity Analysis
Time Complexity
O(n)
Grows linearly with input size
Space Complexity
O(1)
Uses almost no additional memory