AbortController
- 자바스크립트의 웹 API 중 하나로, 요청을 취소할 수 있는 기능 제공
axios와 함께 사용할 경우, 네트워크 요청을 중단하는데 유용
개념
fetch API와 함께 사용되도록 설계된 인터페이스로, 요청을 취소할 수 있는 신호 (Abortsignal)을 제공
- 이를 통해 오래 걸리는 요청이나 불필요한 요청을 중단할 수 있음
- 컴포넌트나 스코프의 어디에서든 선언이 가능
예시
AbortController를 생성하고, 그 안의 signal을 axios요청에 전달
- 1초 뒤에
controller.abort()를 호출
axios는 AbortController에서 전달된 signal을 감지하고 요청을 중단
- 요청이 취소되면
.catch블록에서 취소된 요청을 처리
import axios from "axios";
const controller = new AbortController();
const signal = controller.signal;
axios
.get("...", {signal})
.then((response) => {
console.log(response.data)
})
.catch((error) => {
if (axios.isCancel(error)) {
console.log("요청 취소", error.message)
} else {
console.log("요청 중 오류 발생", error
}
})
setTimeout(() => {
controller.abort();
console.log("abortController를 사용해 요ㅓㅇ 중단")
}, 1000)
사용
- 사용자 인터페이스 업데이트 : 사용자가 검색어를 빠르게 입력하면 이전 요청을 중단, 최신 검색어로만 결과를 받아오도록 그 전 요청 취소
- 시간 초과 관리 : 네트워크가 느린 경우, 일정 시간이 지나면 요청을 취소하여 리소스를 절약
- 불필요한 요청 제거 : 컴포넌트가 언마운트될 때, 진행 중인 네트워크 요청을 취소하여 메모리 누수를 방지