
ES6(ECMAScript 2015) – 프로미스 – 2 – 에러 처리
에러 처리란 무엇인가요?
에러 처리(Error handling)는 프로그램 실행 중에 발생할 수 있는 예외나 오류를 적절하게 다루는 과정을 말합니다. 이를 통해 프로그램이 예기치 않은 상황에서도 안정적으로 실행되고, 사용자에게 친절한 에러 메시지를 제공할 수 있습니다. ES6(ECMAScript 2015)에서는 프로미스(Promise)를 사용하여 비동기 작업에서 발생할 수 있는 에러를 처리하는 기능을 제공합니다.
프로미스의 에러 처리 방법
프로미스는 비동기 작업의 결과를 다루기 위한 객체로, 성공(resolve) 또는 실패(reject) 두 가지 상태를 가질 수 있습니다. 에러 처리를 위해 프로미스는 catch
메서드를 제공합니다. 이를 사용하여 프로미스가 실패 상태일 때 어떻게 처리할지 정의할 수 있습니다.
프로미스의 에러 처리 예시
아래는 프로미스를 사용하여 비동기 작업을 처리하고, 에러를 적절히 처리하는 예시입니다.
function fetchData() {
return new Promise((resolve, reject) => {
// 비동기 작업 수행
// ...
if (/* 비동기 작업이 성공적으로 완료되었을 경우 */) {
resolve(data); // 데이터를 resolve하여 성공 상태로 변경
} else {
reject(new Error('데이터를 불러오는 데 실패했습니다.')); // 에러를 reject하여 실패 상태로 변경
}
});
}
fetchData()
.then((data) => {
// 성공적으로 데이터를 받아왔을 때 실행할 코드
})
.catch((error) => {
// 데이터를 불러오는 도중 에러가 발생했을 때 실행할 코드
console.error(error.message);
});
위 예시에서 fetchData
함수는 프로미스를 반환합니다. 비동기 작업이 성공적으로 완료되었을 경우 resolve
를 호출하여 프로미스를 성공 상태로 변경하고, 실패할 경우 reject
를 호출하여 프로미스를 실패 상태로 변경합니다. 이후 then
메서드를 사용하여 성공 상태일 때 실행할 코드를 작성하고, catch
메서드를 사용하여 실패 상태일 때 실행할 코드를 작성합니다. catch
메서드의 인자로 전달한 콜백 함수는 에러 객체를 인자로 받아 실행되며, 에러 메시지를 출력하는 등의 에러 처리 작업을 수행할 수 있습니다.
프로미스 에러 처리의 비유적인 설명
프로미스의 에러 처리를 비유적으로 설명하자면, 프로미스는 당신이 맡긴 비동기 작업을 처리하는 “신뢰할 수 있는 친구”입니다. 그러나 친구도 가끔 실패할 수 있으며, 이를 대비해 예외 상황에 대한 처리 방법을 미리 약속해야 합니다.
예를 들어, 당신이 친구에게 장보기를 부탁했는데 친구가 물건을 사러 갔다가 문제가 생겨 돌아오지 못했다면 어떻게 해야 할까요? 이럴 때 친구는 실패 상태에 있고, 당신은 그 상황을 알 수 있어야 합니다. 프로미스의 catch
메서드는 이런 실패 상태를 감지하여 당신에게 알려주는 역할을 합니다. 당신은 catch
메서드를 사용하여 어떻게 처리할지 약속하고, 실패 상황에 대한 대응을 적절히 처리할 수 있습니다.
프로미스 에러 처리의 주의사항
프로미스의 에러 처리를 할 때 주의해야 할 몇 가지 사항이 있습니다.
catch
메서드는 프로미스 체인에서 마지막에 위치해야 합니다. 만약catch
메서드가 체인 중간에 위치한다면, 이전 단계에서 발생한 에러를 감지하지 못할 수 있습니다. 따라서 에러 처리는 마지막에 한 번만 정의해야 합니다.catch
메서드 내부에서 에러를 처리한 후에도 새로운 프로미스를 반환하지 않으면, 체인의 다음 단계는 성공 상태로 진행됩니다. 즉, 에러 처리를 하고 나서도 체인이 멈추지 않고 계속 진행됩니다. 이를 유의하여 에러 처리 후의 원하는 동작을 구현해야 합니다.
이렇게 프로미스를 사용하여 에러 처리를 할 수 있습니다. 프로미스는 비동기 작업의 결과를 다루는 강력한 도구이며, 에러 처리를 통해 안정적이고 예측 가능한 코드를 작성할 수 있습니다.
ES6(ECMAScript 2015)의 프로미스를 활용한 에러 처리에 대해 소개해드렸는데요, 추가로 궁금한 점이 있으시다면 더 자세히 알려주세요!