JavaScript Promises의 기본 원리와 활용법
JavaScript에서 비동기 작업을 다루는 것은 웹 개발의 중요한 부분입니다. "Promise"는 이러한 비동기 작업을 더 쉽게 관리할 수 있는 방법을 제공합니다. 이 글에서는 JavaScript Promises의 기본 원리와 활용법을 쉽게 설명하고자 합니다.
JavaScript Promises란 무엇인가요?
간단히 말해서, Promise는 미래에 완료될 작업의 결과를 대표합니다. 이 작업은 성공적으로 완료될 수도 있고, 실패할 수도 있습니다. Promise는 이 두 가지 결과를 다루는 방법을 제공합니다.
기본 사용법
Promise를 사용하는 기본적인 방법은 다음과 같습니다:
let promise = new Promise(function(resolve, reject) {
// 비동기 작업을 수행합니다.
let success = true; // 가정: 작업이 성공적으로 완료되었습니다.
if (success) {
resolve("작업 성공!");
} else {
reject("작업 실패.");
}
});
promise.then(function(result) {
console.log(result); // "작업 성공!"이 출력됩니다.
}, function(error) {
console.log(error); // 실패한 경우, "작업 실패."가 출력됩니다.
});
Promise의 상태
Promise는 세 가지 상태를 가집니다:
- Pending(대기 중): 초기 상태, 성공 또는 실패로 아직 결정되지 않음.
- Fulfilled(이행됨): 작업이 성공적으로 완료됨.
- Rejected(거부됨): 작업이 실패함.
체이닝(Chaining)
Promise의 가장 강력한 기능 중 하나는 여러 비동기 작업을 연결할 수 있다는 것입니다. .then()
메소드를 사용하여 이를 구현할 수 있습니다:
new Promise(function(resolve, reject) {
setTimeout(() => resolve(1), 1000); // 1초 후에 숫자 1을 반환합니다.
})
.then(function(result) { // 첫 번째 .then()
console.log(result); // 1
return result * 2;
})
.then(function(result) { // 두 번째 .then()
console.log(result); // 2
return result * 2;
})
.then(function(result) { // 세 번째 .then()
console.log(result); // 4
return result * 2;
});
이 예제는 각 .then()
호출이 이전 호출의 결과에 기반하여 다음 작업을 수행하는 방법을 보여줍니다.
오류 처리
.catch()
메소드를 사용하여 Promise 체인에서 발생할 수 있는 오류를 쉽게 처리할 수 있습니다:
new Promise(function(resolve, reject) {
throw new Error("에러 발생!");
})
.catch(function(error) {
console.error(error); // 에러를 콘솔에 출력합니다.
});
이 방법을 사용하면 비동기 작업 중 발생하는 예외를 효율적으로 처리할 수 있습니다.
결론
JavaScript Promises는 비동기 작업을 다루는 강력하고 유연한 방법을 제공합니다. 이를 통해 코드의 가독성을 높이고, 오류 처리를 개선할 수 있습니다. Promises의 기본 원리와 활용법을 이해하면, 복잡한 비동기 로직도 쉽게 관리할 수 있게 됩니다.