
AbortController는 JavaScript에서 제공되는 기능 중 하나로, 비동기 작업을 취소하는 데 사용됩니다. 주로 Fetch API와 함께 사용되어 네트워크 요청을 중단하거나 프로미스를 취소하는 데 활용이 되죠. 이것은 주로 웹 애플리케이션에서 사용자 경험을 향상시키거나 불필요한 네트워크 요청을 방지하는 데 유용하다.
- AbortController는 하나 이상의 웹 요청을 중단할 수 있는 인터페이스이다.
- 대표적으로 fetch API, Dom Event를 특정 시점에 중단시킬 수 있다.
웹 요청을 중단할 수 있는, AbortController 인터페이스를 생성한다.
요청을 취소할 수 있는 AbortSignal 객체 인터페이스를 반환한다
웹 요청 API에 AbortSignal객체의 signal값을 인자로 넘기면, 요청을 취소할 수 있는 상태가 된다.
dom event에도, signal을 인자로 넘기면 이벤트를 취소할 수 있는 상태가 된다
abort() 를 사용하면, signal가 할당된 웹 요청을 취소할 수 있다.
aborted는 abort()가 실행되어 요청이 취소되었는지 여부를 알 수 있다.
abort이벤트는 abort()가 실행되어 요청이 중단된 경우 발생한다
See the Pen AbortController by KumJungMin (@kumjungmin) on CodePen.
이벤트 리스너의 경우, removeEventListener를 하지 않으면 이벤트 리스너가 요소보다 오래 남아 메모리 누수가 발생한다.
그렇기에 우리는 이벤트 리스너를 removeEventListener를 사용해 제거해줘야 한다.
그런데 여러 개의 이벤트 리스너가 있는 경우, 일일이 다 removeEventListener로 제거해야하나?
만약 AbortController를 몰랐다면 아래와 같이 제거해야 했을 것이다.
// 이벤트 리스너 등록
btn1.addEventListener('click', onClick);
btn2.addEventListener('click', onClick);
btn3.addEventListener('click', onClick);
// 이벤트 리스너 제거
window.addEventListener('beforeunload', () => {
btn1.removeEventListener('click', onClick);
btn2.removeEventListener('click', onClick);
btn3.removeEventListener('click', onClick);
};
)
하지만 AbortController를 사용하면, abort()를 호출하여 한 번에 이벤트 리스너를 제거할 수 있다
// AbortController 객체 가져오기
const controller = new AbortController();
const { signal } = controller;
// signal인자를 넘기기
btn1.addEventListener('click', onClick, { signal });
btn2.addEventListener('click', onClick, { signal });
btn3.addEventListener('click', onClick, { signal });
// abort() 호출해서 이벤트 리스너 제거하기
window.addEventListener('beforeunload', () => {
controller.abort();
};
)
AbortController를 사용해 웹 요청을 취소하는 방법에 대해 알아보았다
우선 취소하고 싶은 웹 요청 함수에 singal변수를 인자로 넘겨야 했으며, abort()를 실행하면 요청을 취소할 수 있었다
만약 비동기 함수를 중간에 취소해야 하거나 Dom 이벤트를 한 번에 제거하고 싶다면 이 방법을 써도 좋을 듯 하다
https://developer.mozilla.org/en-US/docs/Web/API/AbortController/AbortController