AbortController 사용 중 DOMException [AbortError]를 만난다면

김성현·2022년 6월 5일
0

최근 노드 사용 중 이상한 에러가 발생하는 것을 확인했다.

에러의 이름은 DOMException [AbortError], 전에는 분명 생기지 않던 문제고 어디서 일어나는 에러인지 파악하기 힘들었다.

또 다른 분들에게는 일어나지 않는 문제인지(아마 AbortController 자체가 별로 잘 쓰이지 않는 탓일 거다.) 인터넷에서도 원인을 파악하기 쉽지 않았다.

원인은 간단하다. 노드의 기본 AbortController 클래스에서 변경점이 있었다.

이렇게 보니 정말 단순한데 이리저리 섞인 코드에서 이 부분을 추측하는 건 쉽지 않았다.

위의 그림과 같이 과거에는 abort() 호출시 signalreasonundefined로 세팅되었는데 17 버전부터는 위와 같이 DOMException [AbortError]를 일으키도록 변경되었다.

아래 소스코드는 원인을 찾던 도중 발견한 nodejs의 lib 소스코드 링크이다.


node 17 버전에서의 lib/internal/abort_controller
https://github.com/nodejs/node/blob/v17.9.1/lib/internal/abort_controller.js#L320-L323


node 16 버전에서의 lib/internal/abort_controller
https://github.com/nodejs/node/blob/v16.15.1/lib/internal/abort_controller.js#L154-L156

--

이는 최근 node 17에서 DOMException을 global 접근 가능하도록 공개했는데 이 과정에서 API 변경점이 있었던 것 같다.

메이저 버전이 올라갔으니, 그럴 수도 있는데 솔직히 이런 사소한 것 같으면서도 중요한 차이점은 놓치기 쉬워서 문제를 찾기 힘들었다.

혹시 DOMException [AbortError] 관련 문제가 발생한다면 사용중인 외부 패키지에 AbortController, AbortSignal을 사용하고 있는지 확인해 보아라. 아마 이때문에 생겼을 가능성이 있다.

profile
수준 높은 기술 포스트를 위해서 노력중...

0개의 댓글