
Promise는 자바스크립트에서 비동기적인 작업을 처리하기 위한 객체임.
주로 서버에서 데이터를 가져오거나 파일을 읽는 등 시간이 걸리는 작업을 처리할 때 사용함.
대기(pending):
작업이 아직 수행되지 않은 상태
이행(fulfilled):
작업이 성공적으로 완료된 상태
거부(rejected):
작업이 실패한 상태
Promise를 생성할 때는 콜백 함수를 전달하여 처리할 비동기 작업을 정의함.
이 콜백 함수는 resolve와 reject라는 두 개의 인수를 받음.
resolve는 작업을 성공적으로 완료했을 때 호출되며, 결과 값을 전달함.
reject는 작업을 실패했을 때 호출되며, 에러를 전달함.
Promise를 사용하면 비동기적인 작업의 결과를 처리하기 위해 then() 및 catch() 메서드를 통해 작업을 연결하여 처리함.
then() 메서드는 작업이 성공적으로 완료되었을 때 실행되며,
catch() 메서드는 작업이 실패했을 때 실행됩니다.
const readFilePromise = new Promise((resolve, reject) => {
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
reject(err); // 작업 실패 시 reject 호출
} else {
resolve(data); // 작업 성공 시 resolve 호출
}
});
});
readFilePromise.then((data) => {
console.log(data); // 파일 읽기 성공 시 데이터 출력
}).catch((err) => {
console.error(err); // 파일 읽기 실패 시 에러 출력
});
위 예는 readFilePromise라는 Promise 객체를 생성하여 파일을 읽는 작업을 수행함.
이후 then() 및 catch() 메서드를 사용하여 성공 및 실패 시의 동작을 정의함.
Promise.all()은 여러 개의 Promise를 받아들이고,
모든 Promise가 이행될 때까지 기다린 다음 모든 Promise가 이행된 결과를 반환하는 메서드
이 메서드는 배열로 Promise를 전달 받고, 각 Promise가 이행되면 그 결과를 배열에 모아 반환함.
만약 하나의 Promise라도 거부(rejected)되면 Promise.all()은 그 즉시 거부됨.
모든 Promise가 성공적으로 이행되어야만 결과를 반환함.
예를 들어, 서로 다른 두 개의 API에서 데이터를 가져와야 하는 경우 Promise.all()을 사용할 수 있음.
const promise1 = fetchDataFromAPI1();
const promise2 = fetchDataFromAPI2();
Promise.all([promise1, promise2])
.then(results => {
// 두 개의 Promise가 모두 이행될 때 실행됨
const dataFromAPI1 = results[0];
const dataFromAPI2 = results[1];
// 데이터를 처리하는 로직
})
.catch(error => {
// 하나 이상의 Promise가 거부될 때 실행됨
console.error("An error occurred:", error);
});
위 예시에서 Promise.all()은 promise1과 promise2를 배열로 받아들여서 두 개의 Promise가 모두 이행될 때까지 기다린 다음, 모든 데이터를 배열에 담아 반환한다.
이후 .then() 메서드를 사용하여 모든 데이터를 처리할 수 있다.