Post

자바스크립트 ES6+: Fetch에서 요청을 취소하는 방법

참고: 자바스크립트: Fetch (외부 라이브러리 없이 AJAX 사용)

 

자바스크립트 Fetch APi에서 보냈던 요청을 취소하는 방법은 다음과 같습니다.

  • 새로운 const abortController = new AbortController()를 생성
  • fetch 옵션에 signal: abortController.signal 추가
  • 요청 취소를 원하는 타이밍에 abortController.abort() 실행

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// <pre class="result"></pre>
// <button class="btn-cancel">로딩 취소</button>

const init = () => {
    
    const result = document.querySelector(".result")
    const btnCancel = document.querySelector(".btn-cancel")
    
    const abortController = new AbortController() // AbortController 인스턴스 생성
    
    const initFetch = async() => {
    
        try {
            result.textContent = "로딩중..."
            const response = await fetch("https://reqres.in/api/users?delay=5", {
                signal: abortController.signal // 취소 액션이 실행될 경우 요청 취소
            })
            const text = await response.text()
            result.textContent = text
        } catch(err) {
            console.error(err)
        } 
    }
    
    initFetch()
    btnCancel.addEventListener("click", e => {
        abortController.abort() // 원하는 타이밍에 취소 요청 보내기
        result.textContent = "취소됨"
    })
    
}

init()

[caption id=”attachment_3657” align=”alignnone” width=”400”] 요청 취소를 하지 않았을 때[/caption]

 

[caption id=”attachment_3658” align=”alignnone” width=”410”] 요청 취소를 했을 때[/caption]

 

 

출처: fetch request의 처리를 취소하기

This post is licensed under CC BY 4.0 by the author.