Development Tip

try .. catch .. finally로 Javascript 오류 처리

yourdevel 2021. 1. 7. 20:05
반응형

try .. catch .. finally로 Javascript 오류 처리


finally블록을 잘못 사용하고 있고 그 목적의 기본을 이해하지 못한다 는 의혹이 있습니다.

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }

이 함수는 catch블록 을 실행하고 "오류"를 경고 한 다음 true를 반환합니다. 왜 거짓을 반환하지 않습니까?


finally 블록에는 try 및 catch 블록이 실행 된 후 try ... catch 문 다음의 문이 실행되기 전에 실행할 문이 포함됩니다. finally 블록은 예외 발생 여부에 관계없이 실행됩니다. 예외가 발생하면 catch 블록이 예외를 처리하지 않더라도 finally 블록의 문이 실행됩니다.

finally블록은 항상 실행됩니다 . 블록 true후에 돌아 try오십시오.

function myFunc() {
     try {
         if (true) {
               throw "An error";
          }
          return true;
     } catch (e) {
          alert (e);
          return false;
     } finally {
          //do cleanup, etc here
     }
 }

마지막으로 try 블록에서 나갈 때 블록이 실행됩니다. 코드에서 이것은 false를 반환 할 때 발생합니다. 이는 반환 값을 false로 설정하고 함수를 종료하려고합니다. 그러나 먼저 finally를 트리거하고 반환 값을 true로 덮어 쓰는 try 블록을 종료해야합니다.

많은 사람들은 함수 당 하나의 return 문을 갖는 것이 좋은 프로그래밍 관행이라고 생각합니다. 함수의 시작 부분에 var retval을 만들고 함수 전체에서 적절하게 true 또는 false로 설정 한 다음 코드가 하단의 단일 반환으로 올바르게 떨어지도록 코드를 구성하는 것을 고려하십시오.


function getTheFinallyBlockPoint(someValue) {
    var result;
    try {
        if (someValue === 1) {
            throw new Error("Don't you know that '1' is not an option here?");
        }
        result = someValue
    } catch (e) {
        console.log(e.toString());
        throw e;
    } finally {
        console.log("I'll write this no matter what!!!");
    }

    return result;
};

getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!");
getTheFinallyBlockPoint(1);

브라우저의 콘솔에서 이것을 실행하면 원하는 답을 얻을 수 있습니다.

참조 URL : https://stackoverflow.com/questions/286297/javascript-error-handling-with-try-catch-finally

반응형