자, finally 메소드는 보통 이렇게 Promise Chaining에서 catch메소드 보다도 더 뒤에 씁니다. 이렇게 쓰면 finally 메소드 안에 콜백은 그 전에 Promise 객체가 fulfilled 상태가 되든 , rejected 상태가 되든 상관 없이 항상 실행되게 됩니다.
그렇니까 어떤 경우든 항상 저 부분이 실행 되어서 ‘exit’ 이라는 문자열이 출력 될것 입니다. 그리고 finally 메소드 안에 콜백은 작업 성공 결과나, 작업 실패 정보가 필요하지 않기 때문에 딱히 파라미터가 필요 없다는게 특징 입니다. 그래서 지금 콜백에 아무 파라미터도 없는것 입니다.
자 이 코드를 한번 실행해 보겠습니다. response 내용이 출력된 다음 ‘exit’이라는 단어가 잘 출력 됩니다. 그럼 이번엔 Promise객체를 rejected 상태로 만들고 그때도 ****finally 메소드 안에 콜백이 실행 되는지 보겠습니다.
존재 하지 않은 URL을 실행해 보겠습니다. 이렇게 하면 catch메소드 안에 콜백이 실행 되겠죠. 음.. 이렇게 하면 catch메소드가 리턴했던 Promise객체가 fulfilled 상태가되고, undifind를 작업 성공 결과로 갖게 됩니다. catch메소드가 리턴한 Promise객체를 rejected 상태 만들기 위해서 catch메소드안에서 에러를 발생 시켜 볼게요
자 이렇게 수정하면 catch메소드가 리턴한 Promise객체가 rejected 상태가 되겠죠. 이런데도 finally 메소드의 콜백은 실행 됩니다. 코드를 실행 해보면
finally 메소드 안에 콜백은 잘 실행 되었네요 이 결과의 의미는 에러를 처리하는 catch메소드에서 에러가 발생하더라도 finally 메소드 안에 콜백은 실행 된다는 뜻 입니다.
이걸 다시 말하면 finally는 정상적인 경우든, 최악의 경우든 상관 없이 항상 무조건 실행 해야 하는 코드가 있을때 사용한다는 것 입니다. 예를 들어서 Promise Chaining에서 작업을 수행하기 위해서 사용했던 자원을 정리한다 던가 어떤 로그 기록을 남겨야 한다 던가, 어떠한 경우든 항상 특정 변수의 값을 변경해줘야 할때 이 finally메소드를 사용합니다. finally메소드 위치와, 사용 용도를 잘 기억해주세요. finally메소드는 보통 catch메소드 뒤에 씁니다.