Pending(대기)
: 비동기 작업이 아직 끝나지 않은 초기 상태Fulfilled(이행)
: 비동기 작업이 성공적으로 완료된 상태Rejected(거절)
: 비동기 작업이 실패한 상태Promise
생성자 함수는 비동기 작업을 수행하고, 결과를 반환하는 함수를 인자로 받음 (resolve
, reject
)
resolve
: 비동기 작업 성공 시 호출, 이행 상태로 변경
reject
: 비동기 작업 실패 시 호출, 거절 상태로 변경
resolve
또는 reject
함수 호출 시 비동기 작업 종료
[ 예시 ]
// Promise 생성자 함수를 직접 사용하는 방법
// new Promise() : 생성자 함수
// (resolve, reject) => {} : 비동기 작업을 수행하고, 결과를 반환하는 함수
const promise = new Promise((resolve, reject) => {
// 비동기 작업 흉내
setTimeout(() => {
const random = Math.random(); // 랜덤 숫자 생성
if (random > 0.5) {
resolve("숫자가 0.5 이상! 성공"); // 성공 시 반환
} else {
reject("숫자가 0.5 이하! 실패"); // 실패 시 반환
}
}, 1000);
});
then()
: 비동기 작업 성공 시 실행, resolve
함수 호출 시 실행catch()
: 비동기 작업 실패 시 실행, reject
함수 호출 시 실행finally()
: 성공/실패
와 관계없이 항상 실행
[ 예시 ]
promise
.then((result) => console.log(result)) // 성공(Fulfilled) 시 실행
.catch((error) => console.log(error)) // 실패(Rejected) 시 실행
.finally(() => console.log("비동기 처리 작업 완료")); // 성공/실패와 관계없이 항상 실행
여러 개의 비동기 작업 처리
then()
함수를 여러 번 사용하여 여러 비동기 작업을 순차적으로 처리하는 기법[ 예시 ]
const promise = new Promise((resolve, reject) => {
resolve(1);
});
promise
.then((result1) => {
console.log(result1);
return result1 + 1; // 다음 then() 함수 내 콜백 함수의 인자로 전달
})
.then((result2) => {
console.log(result2);
return result2 + 2; // 다음 then() 함수 내 콜백 함수의 인자로 전달
})
.then((result3) => {
console.log(result3); // 4
});