@hm-soft/retry
v0.1.0
Published
비동기 재시도 — 지수 백오프 + 지터, shouldRetry/onRetry/AbortSignal 지원 (의존성 0)
Maintainers
Readme
@hm-soft/retry
비동기 작업 재시도 — 지수 백오프 + 지터. 외부 API·결제·네트워크처럼 일시적으로 실패하는 작업에. 의존성 0. 대기/난수 주입으로 결정적 테스트.
설치
npm install @hm-soft/retry사용
import { retry, withRetry } from "@hm-soft/retry";
// 최대 5번 재시도(지수 백오프 100ms → 200 → 400 …, 지터 적용)
const data = await retry(() => fetchJson(url), { retries: 5 });
// 특정 에러만 재시도 (5xx/네트워크만)
await retry(() => callApi(), {
retries: 3,
shouldRetry: (err) => err.status >= 500 || err.code === "ECONNRESET",
onRetry: (err, attempt, delay) => log.warn(`재시도 ${attempt} (${delay}ms 후)`),
});
// 함수에 재시도를 입혀 재사용
const fetchUser = withRetry((id: string) => api.getUser(id), { retries: 3 });
await fetchUser("u1");API
| 함수 | 설명 |
|------|------|
| retry(fn, opts?) | fn을 백오프하며 재시도, 성공값 반환 또는 마지막 에러 throw |
| withRetry(fn, opts?) | 재시도를 적용한 함수를 반환 |
| backoffDelay(attempt, opts?) | attempt(1-base)의 지연(ms) 계산 |
RetryOptions
| 옵션 | 기본 | 설명 |
|------|------|------|
| retries | 3 | 추가 재시도 횟수(총 = 1 + retries) |
| minDelayMs | 100 | 첫 재시도 지연 |
| maxDelayMs | 30000 | 지연 상한 |
| factor | 2 | 지수 배수 |
| jitter | "full" | "full"(0~계산값 랜덤) / "none" |
| shouldRetry | 항상 | (error, attempt) => boolean |
| onRetry | — | 재시도 직전 콜백 |
| signal | — | AbortSignal로 중단 |
| sleep / random | — | 테스트 주입용 |
License
Apache-2.0
