TIL 36. 프로미스 객체 에러 핸들링

CHAEIN·2021년 7월 30일
0

JavaScript

목록 보기
28/31
post-thumbnail

리턴된 프로미스의 객체가 rejected 상태일 때 해당 에러를 핸들링 할 수 있는 방법은 다음과 같다.

1. then 메소드의 두번째 인자 활용하는 법

fetch("https://jsonplaceholder.typicode.com/users")
  .then(
    (response) => response.text(),
    (error) => {
      console.log(error);
    } 
  // 프로미스가 rejected 상태시 실행시킬 콜백을 then 메소드의 두번째 파라미터로 작성한다. 
  //인자로는 fulfilled 상태시 작업 성공 결과가 첫번째 파라미터에, rejected 상태시 작업 실패 결과가 두번째 파라미터에 들어간다.
  )
  .then((result) => {
    console.log(result);
  });

2. .catch 메소드를 활용하는 법

fetch("https://jsonplaceholder.typicode.com/users")
  .then((response) => response.text())
  .catch((error) => { // 에러 객체만 인자로 받아 실행하는 catch 메소드
    console.log(error);
  })
  .then((result) => {
    console.log(result);
  });

catch 메소드를 중간에 작성하면 그 이후 발생한 에러는 핸들링 할 수 없게 된다. 따라서 catch 메소드는 아래와 같이 주로 마지막에 작성된다.

fetch("https://jsonplaceholder.typicode.com/users")
  .then((response) => response.text())
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.log(error);
  });

그러나 때에 따라 Promise Chain 중간에 에러가 발생했다해도 실패한 작업 대신 다른 방법을 통해 작업을 정상적으로 끝마칠 수 있는 상황이라면 catch 메소드를 중간에 사용하기도 한다. 종합하면 Promise Chain 중에서 단 하나의 작업이라도 실패하면 전체 작업이 실패했다고 봐도 되는 경우에는 그냥 Promise Chain 마지막에만 catch 메소드를 써주면 되겠지만, 어떤 작업들은 에러가 발생하더라도 다른 방식으로 복구해서 살려낼 방법이 있다면 catch 메소드 안의 콜백에서 복구 작업을 진행한다. 이 때 catch 메소드는 중간에 위치할 수 있다.

3. finally 메소드

fetch("https://jsonplaceholder.typicode.com/users")
  .then((response) => response.text())
  .then((result) => {
    console.log(result);
  })
  .catch((error) => {
    console.log(error);
  })
  .finally(() => console.log("exit"));

finally 메소드는 보통 catch 메소드보다 더 뒤에 쓴다. 이렇게 되면 finally 메소드는 그전의 promise 객체의 상태가 fulfilled이든 rejected이든 관계없이 항상 실행된다. 이 경우에는 항상 'exit'이 출력된다. finally 메소드는 작업성공 결과나 실패에 따라 작업 실행이 결정되지 않기 때문에 따로 파라미터가 필요하지 않다. 정리하면 Finally는 정상적인 상황이든 에러가 발생한 상황이든 항상 무조건 실행해야되는 작업이 있을 때 사용한다.

0개의 댓글