Promise는 자바스크립트에서 비동기 작업이 완료되었을 때(또는 실패했을 때) 결과 값을 처리할 수 있게 해주는 객체입니다. Promise는 세 가지 상태를 가집니다:
Pending (대기): 비동기 작업이 아직 완료되지 않은 상태.
Fulfilled (이행): 비동기 작업이 성공적으로 완료된 상태.
Rejected (거부): 비동기 작업이 실패한 상태.
const promise = new Promise((resolve, reject) => {
// 비동기 작업 수행
let success = true;
if (success) {
resolve('성공!'); // 작업 성공 시
} else {
reject('실패...'); // 작업 실패 시
}
});
promise
.then(result => {
console.log(result); // '성공!' 출력
})
.catch(error => {
console.log(error); // '실패...' 출력
});
const firstPromise = new Promise((resolve) => {
setTimeout(() => resolve('첫 번째 비동기 작업 완료'), 1000);
});
const secondPromise = new Promise((resolve) => {
setTimeout(() => resolve('두 번째 비동기 작업 완료'), 2000);
});
firstPromise
.then(result1 => {
console.log(result1);
return secondPromise; // 다음 Promise 반환
})
.then(result2 => {
console.log(result2); // 첫 번째 작업 후 두 번째 작업 실행
})
.catch(error => {
console.log('에러 발생:', error);
});
async/await는 ES2017(ES8)에서 도입된 문법으로, Promise를 더 간결하고 직관적으로 사용할 수 있게 도와줍니다. async 키워드는 함수가 Promise를 반환하는 비동기 함수임을 나타내며, await 키워드는 Promise가 처리될 때까지 기다린 후 결과를 반환받을 수 있도록 합니다.
async function fetchData() {
try {
const result1 = await firstPromise;
console.log(result1);
const result2 = await secondPromise;
console.log(result2);
} catch (error) {
console.log('에러 발생:', error);
}
}
fetchData();
async function fetchMultipleData() {
try {
const [result1, result2] = await Promise.all([firstPromise, secondPromise]);
console.log(result1, result2);
} catch (error) {
console.log('에러 발생:', error);
}
}
fetchMultipleData();