JavaScript Promises의 기본 개념과 활용법
JavaScript Promises는 비동기 작업을 쉽게 처리할 수 있게 해주는 강력한 도구입니다. 웹 개발을 하다 보면, 서버에서 데이터를 가져오거나 파일을 읽는 등의 작업을 비동기적으로 처리해야 할 때가 많습니다. 이때 Promises가 큰 역할을 합니다.
JavaScript Promise란 무엇인가?
간단히 말해서, Promise는 어떤 작업이 완료될 것이라는 "약속"입니다. 이 작업은 성공할 수도 있고, 실패할 수도 있습니다. Promise는 세 가지 상태 중 하나를 가집니다:
- 대기(Pending): 작업이 아직 완료되지 않은 상태.
- 이행(Fulfilled): 작업이 성공적으로 완료된 상태.
- 거부(Rejected): 작업이 실패한 상태.
Promise 생성하기
JavaScript에서 Promise를 생성하는 것은 간단합니다. new Promise()
생성자를 사용하여 Promise 객체를 만들 수 있습니다. 이때, 생성자에는 실행 함수(executor function)가 전달됩니다. 이 함수는 두 개의 인자, resolve
와 reject
를 받습니다.
let myPromise = new Promise(function(resolve, reject) {
// 비동기 작업을 여기에 작성
// 성공 시, resolve를 호출
// 실패 시, reject를 호출
});
Promise 사용하기
Promise가 생성되면, .then()
, .catch()
, .finally()
메서드를 사용하여 결과를 처리할 수 있습니다.
.then()
메서드는 Promise가 성공적으로 이행되었을 때 실행됩니다. 결과 값을 받아 처리할 수 있습니다..catch()
메서드는 Promise가 거부되었을 때 실행됩니다. 오류를 처리할 수 있습니다..finally()
메서드는 Promise의 성공/실패 여부와 상관없이 실행됩니다. 정리 작업을 수행할 수 있습니다.
myPromise
.then(function(value) {
// 성공 시 실행될 코드
console.log(value);
})
.catch(function(error) {
// 실패 시 실행될 코드
console.log(error);
})
.finally(function() {
// 성공/실패 여부와 상관없이 실행될 코드
console.log('Promise가 처리되었습니다.');
});
예제: 파일 읽기 Promise
아래는 파일을 비동기적으로 읽는 작업을 Promise를 사용하여 처리하는 예제입니다.
const fs = require('fs');
function readFilePromise(filePath) {
return new Promise(function(resolve, reject) {
fs.readFile(filePath, { encoding: 'utf-8' }, function(err, data) {
if (err) {
reject(err); // 파일 읽기 실패
} else {
resolve(data); // 파일 읽기 성공
}
});
});
}
readFilePromise('example.txt')
.then(function(data) {
console.log(data); // 파일 내용 출력
})
.catch(function(error) {
console.error(error); // 오류 출력
});
이 예제에서는 fs.readFile
함수를 사용하여 파일을 읽습니다. Promise를 사용하면, 비동기 작업의 결과를 .then()
과 .catch()
메서드를 통해 간결하게 처리할 수 있습니다.
JavaScript Promises는 비동기 프로그래밍을 보다 쉽고 효율적으로 만들어 줍니다. 이 기본 개념과 활용법을 이해하면, 웹 개발에서 마주치는 다양한 비동기 문제를 해결하는 데 큰 도움이 될 것입니다.