.catch() VS try-catch

2023. 4. 5. 10:10개발/토막난 상식

반응형
try {
  deleteCode(codeKey)
    .then(() => {
      dispatch(codeAction.getCodeList({ target: "codeList" }));
      codeForm.resetFields();
    });
} catch(e) {
  console.error(e);
}
deleteCode(codeKey)
  .then(() => {
      dispatch(codeAction.getCodeList({ target: "codeList" }));
      codeForm.resetFields();
  })
  .catch((e) => {
    console.error(e);
  })

위의 코드는 try-catch 구문으로 에러를 처리하려고 시도하고 있습니다. deleteCode 함수가 반환하는 Promise가 reject 되면 catch 블록이 실행됩니다.

 

위의 코드는 try-catch 구문으로 에러를 처리하려고 시도하고 있습니다. deleteCode 함수가 반환하는 Promise가 reject 되면 catch 블록이 실행됩니다.

아래의 코드는 catch 블록을 추가하여 deleteCode 함수가 반환하는 Promise가 reject 될 경우 직접 에러를 처리합니다.

즉, 두 코드 모두 deleteCode 함수를 호출하고, 그 다음에 then 블록에서 dispatch와 resetFields를 실행합니다. 그러나 위의 코드는 try-catch 구문을 사용하여 에러를 처리하고, 아래의 코드는 catch 블록을 사용하여 에러를 처리합니다.

따라서 위의 코드는 try-catch 구문으로 에러를 처리하려는 목적이 있고, 아래의 코드는 catch 블록을 사용하여 명시적으로 에러를 처리하려는 목적이 있습니다.



기능적으로는 두 코드 블록이 동일합니다.

단지 첫 번째 코드 블록은 try-catch 문으로 둘러싸여 있으며, 두 번째 코드 블록은 Promise의 catch() 메소드를 사용합니다.

try-catch 문은 예외 처리를 위해 사용되며, 코드 블록 내에서 발생하는 모든 예외를 캐치하고 해당 예외에 대한 처리를 수행합니다. 반면에 Promise의 catch() 메소드는 Promise가 실패하는 경우 실행되는 콜백 함수를 등록합니다.

따라서, 첫 번째 코드 블록에서는 try-catch 문을 사용하여 예외를 캐치하고 처리하고, 두 번째 코드 블록에서는 Promise의 catch() 메소드를 사용하여 실패 시 실행할 콜백 함수를 등록합니다. 하지만 실제로는 두 코드 블록 모두 deleteCode() 함수가 성공하면 then() 블록이 실행되고, 실패하면 catch() 블록이 실행됩니다.





첫 번째 방법은 try-catch 문을 사용하여 코드 실행 중 에러가 발생하면 캐치하고 처리합니다. 이 방법은 코드에서 예외 처리를 직접 다룰 수 있기 때문에, 발생 가능한 모든 예외 상황에 대해 미리 대비할 수 있습니다. 그러나 이 방법은 비동기 코드의 예외 처리에 적합하지 않습니다. deleteCode() 함수는 비동기적으로 실행되기 때문에, try-catch 문으로는 예외 처리가 되지 않습니다. 대신, deleteCode() 함수에서 발생한 예외는 Promise 체인의 catch() 메서드에서 처리해야 합니다.

두 번째 방법은 비동기적으로 실행되는 함수에 대해 Promise 체인과 catch() 메서드를 사용하여 예외 처리합니다. 이 방법은 비동기 코드에 대한 예외 처리를 처리할 수 있습니다. Promise 체인에서 발생한 예외는 catch() 메서드에서 처리하며, catch() 메서드는 Promise 체인에서 다음으로 전달됩니다. 이 방법은 코드가 비교적 간결하고 읽기 쉽습니다.

따라서, try-catch 문은 동기적인 코드에서 예외 처리를 다룰 때 사용하고, Promise 체인과 catch() 메서드는 비동기적인 코드에서 예외 처리를 다룰 때 사용하는 것이 좋습니다.

 

 

동기적인 예시:
예를 들어, 함수 A가 호출되면 함수 B가 호출되고, 함수 B가 완료될 때까지 함수 A는 대기합니다. 함수 B가 완료되면 함수 A는 다시 실행됩니다. 이런 식으로 함수 호출이 순차적으로 처리되는 것을 동기적인 방식이라고 합니다. 예를 들어, 두 개의 함수가 있을 때, A 함수를 호출하면 A 함수가 실행되는 동안 B 함수는 기다리게 되고, A 함수가 실행이 완료되면 B 함수가 실행됩니다.

비동기적인 예시:
예를 들어, 사용자가 파일을 업로드하면 서버는 파일을 업로드하는 동안 다른 작업을 수행할 수 있습니다. 서버는 파일 업로드가 완료되면 업로드한 파일의 정보를 반환합니다. 이런 방식으로 함수 호출이 순차적으로 처리되지 않는 것을 비동기적인 방식이라고 합니다. 예를 들어, 두 개의 함수가 있을 때, A 함수를 호출하면 A 함수가 실행되는 동안 B 함수도 동시에 실행됩니다. A 함수와 B 함수는 서로에게 영향을 주지 않고 동시에 실행됩니다.

삭제는 동기적으로 할 수도 있고, 비동기적으로 할 수도 있습니다.

동기적인 삭제는 코드가 실행되면 해당 코드가 모두 완료될 때까지 기다리는 방식입니다. 즉, 삭제 작업이 완료되기 전까지는 다음 코드가 실행되지 않습니다.

반면 비동기적인 삭제는 삭제 요청이 발생하면 삭제 작업이 백그라운드에서 실행되며, 삭제 작업이 완료될 때까지 기다리지 않고 바로 다음 코드를 실행합니다. 이 방식은 대규모 데이터를 다룰 때 유용하며, 사용자 경험을 개선할 수 있습니다.

삭제 작업이 빠르게 수행된다면 동기적인 삭제 방식을 사용해도 문제가 없습니다. 하지만, 삭제 작업이 오래 걸리는 경우 비동기적인 삭제 방식을 사용하는 것이 좋습니다.

 

 

동기적인 작업은 결과가 나올 때까지 다른 작업을 중단시키고 대기해야 한다는 단점이 있지만, 다음 작업이 이전 작업에 의존하는 경우에는 동기적인 작업이 필요합니다. 예를 들어, 특정 작업을 수행하기 위해서는 이전 작업의 결과를 필요로 하는 경우가 있습니다. 이러한 경우에는 이전 작업이 완료되기 전까지 대기해야 하므로 동기적인 작업을 사용하는 것이 좋습니다.

또한, 동기적인 작업은 코드가 간결하고 이해하기 쉽다는 장점이 있습니다. 비동기적인 작업은 코드가 더 복잡해지고, 작업의 순서와 처리 결과에 대한 관리가 필요하기 때문에 구현과 유지보수가 더 어렵다는 단점이 있습니다. 따라서, 작업의 성격에 따라 적절한 방법을 선택해야 합니다.

반응형

'개발 > 토막난 상식' 카테고리의 다른 글

POST PUT  (0) 2023.04.06
conda 명령어  (0) 2023.04.06
redux-toolkit  (0) 2023.04.04
.then((response) => response.data);  (0) 2023.03.31
리액트 연습 코드 모음  (0) 2023.03.31