기본 패턴
javascript
const controller = new AbortController();
setTimeout(() => controller.abort(), 3000);
const response = await fetch("https://api.example.com/data", {
signal: controller.signal,
});설명
AbortController는 오래 걸리는 비동기 작업을 바깥에서 취소할 수 있게 만드는 표준 도구입니다.fetch()처럼signal을 받는 API에 연결하면, 일정 시간이 지나거나 사용자가 취소할 때 같은 방식으로 작업을 멈출 수 있습니다.- 이 패턴은 네트워크 요청뿐 아니라 스트림, 타이머, 직접 만든 비동기 함수에서도 점점 더 자주 보입니다.
- 중요한 점은 "취소할 수 있다"와 "자동으로 정리된다"가 같지 않다는 것입니다. 취소 후 정리 로직도 함께 생각해야 합니다.
- 즉
AbortController는 타임아웃 구현 도구이기도 하지만, 더 넓게 보면 비동기 작업의 생명주기를 제어하는 인터페이스입니다.
짧은 예제
javascript
const signal = AbortSignal.timeout(2000);
await fetch("https://api.example.com/users", { signal });빠른 정리
| 항목 | 의미 |
|---|---|
new AbortController() | 취소 제어기 생성 |
controller.signal | 작업에 전달할 취소 신호 |
controller.abort() | 취소 발생 |
AbortSignal.timeout(ms) | 시간 기반 신호 생성 |
주의할 점
취소된 작업은 보통 예외처럼 처리됩니다. 단순 실패와 취소를 같은 경로로 다루면 로그가 시끄러워지고, 실제 오류와 사용자가 의도한 취소를 구분하기 어려워질 수 있습니다.
참고 링크
2 sources