Promise의 finally() 메서드란?
프로미스(Promise)가 처리(settled)되면, 즉 이행(fulfilled)되거나 거부(rejected)되었을 때, finally() 메서드에 지정된 콜백 함수가 호출됩니다. finally() 메서드 역시 새로운 Promise를 반환하기 때문에 then(), catch()와 같이 메서드 체이닝(method chaining)이 가능합니다.
finally()를 활용하면 프로미스가 성공적으로 이행되었는지 거부되었는지와 관계없이, 프로미스가 처리된 후 반드시 실행해야 하는 코드를 한곳에서 관리할 수 있습니다. 로딩 상태 해제, 리소스 정리 등과 같은 공통 작업을 처리할 때 특히 유용합니다.
예제 1: 프로미스가 성공한 경우
new Promise(
(resolve) => setTimeout(resolve("success"), 1000)
).then(val => console.log(val)).finally(() => console.log("Promise complete!"))출력 결과
success Promise complete!
위 예제에서 프로미스가 성공적으로 이행되어 then()의 콜백이 실행된 후, finally()의 콜백도 순차적으로 호출된 것을 확인할 수 있습니다.
그렇다면 프로미스가 실패하는 경우에는 어떻게 될까요? 아래 예제를 살펴보겠습니다.
예제 2: 프로미스가 실패한 경우
// undefined에는 get 메서드가 없으므로 에러가 발생합니다
new Promise(() => undefined.get())
.then(val => console.log(val))
.catch(err => console.log("Failed!"))
.finally(() => console.log("Promise complete!"))출력 결과
Failed! Promise complete!
주목할 점은 프로미스가 성공하든 실패하든 두 경우 모두 finally 문이 실행되었다는 것입니다. 이는 전통적인 try...catch...finally 구문의 finally 블록과 유사하게 동작하며, 에러가 발생하더라도 반드시 수행해야 할 정리(cleanup) 작업을 보장하는 강력한 도구입니다.