FrontEnd

axios의 .catch()와 .finally() 메서드

재성스 2023. 10. 26. 14:51
반응형

.catch()

  • .then()은 http 요청이 성공했을 때 수행되는 메서드
  • 반면, catch()는 실패 했을 때 수행하는 메서드이다.

.finally()

  • HTTP 요청 성공, 실패 여부와는 상관없이 무조건 실행되는 메서드
  • 이 메서드는 인자로 콜백 함수를 받으며, 해당 콜백 함수는 어떠한 매개변수도 전달받지 않는다.

.catch() 활용 예제

    <button onclick="ajax1()">button1</button>
    <script>
        function ajax1() {
            axios.get("/main39/sub1")
                .then(() => console.log("성공"))  // 성공했을 경우 실행
                .catch(() => console.log("실패"));   // 실패 했을 때 수행

        }
    </script>
  • 요청 실패한 경우, 상태코드를 받아오고 그에 따른 작업 수행 예제
          function ajax3() {
              axios.get("/main39/sub2")
                  .catch(function (error) {   // 상태 코드 400으로 가정
                      console.log(error); // 실패에 대한 응답 결과가 포함되어 있음
                      console.log(error.response.status); // response객체에 status 프로퍼티
                      let status = error.response.status; // let status = 400;
                      if (status >= 400 && status < 500) { // 상태 코드에 따른 작업 수행 
                          console.log("요청이 잘 못되었습니다.");
                      } else if (status >= 500 && status <= 599) {
                          console.log("서버에서 오류가 발생하였습니다.");
                      }
                  });
          }
    <button onclick="ajax4()">button4</button>
    <p id="result1"></p>
    <script>
      function ajax4() {
      // 400번대 응답이면 #result1 요소에 "잘못된 요청" 출력
      // 500번대 응답이면 #resutt1 요소에 "서버 에러" 출력
      axios.get("/main39/sub3")
          .catch(function (error) {
              const code = error.response.status; // 응답 코드 저장
              let message = "";   
              if (400 <= code && code < 500) { // 400번대 응답 코드일 경우
                  message = "잘못된 요청"; 
              } else if (500 <= code) {   // 500 번대 응답일 경우
                  message = "서버 에러";
              }
              document.querySelector("#result1").textContent = message; // message에 할당된 값을 출력
          })
    

 

```HTML
    <input type="text" id="input1" value="30">
    <button onclick="ajax5()">button5</button>
    <script>
        function ajax5() {
            const pid = document.getElementById("input1").value; // 인풋 값을 저장
            axios.get("/main39/sub4?id=" + pid) // 입력받은 pid를 쿼리 스트링에 포함 시켜 GET요청
                .then(response => response.data) // 요청 성공한 경우 응답 객체의 data를 반환
                .then(data => console.log(data)) // 위에서 반환된 data를 console.log
                .catch(error => console.log(error));    // 요청 실패한 경우 응답 객체를 console.log
        }
    </script>

.finally() 활용 예제

        function ajax6() {
            axios.get("/main39/sub5")
                .then(() => console.log("성공#"))
                .catch(() => console.log("실패!"))
                .finally(() => console.log("항상$$$$"))
        }
반응형