[JS] Promise
💭 예상 질문Permalink
- Promise에 대해 아는대로 설명해주세요.
- Promise의 3가지 상태에 대해 설명해 주세요. (pending, fulfilled, rejected)
- 자바스크립트에서 Promise가 왜 필요한가요?
- Promise.then()과 Promise.catch()는 각각 어떤 역할을 하나요?
- 자바스크립트에서 비동기 작업을 어떻게 처리하나요?
🔍 추가 내용Permalink
✅ Promise 객체의 3가지 상태Permalink
아래와 같이 비동기 작업이 성공할 경우나 실패할 경우에 동작할 코드들을 미리 정의할 수 있다.
const promise = new Promise((resolve, reject) => {
if (isSuccess) {
const result = { data: "비동기 작업 성공" };
resolve(result);
} else {
reject(new Error("에러 발생"));
}
});
promise
.then((result) => {
console.log(result); // { data: '비동기 작업 성공' }
})
.catch((error) => {
console.error(error.message); // 에러 발생
});
.finally(() => {
console.log('작업 완료'); // 작업 완료
});
✅ Promise 메서드Permalink
🚨 Promise.all()Permalink
여러 개의 Promise를 병렬로 실행 + 모두 성공했을 때만 성공 결과 반환
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, "foo");
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
> [3, 42, "foo"] # 3초 후 출력
🚨 Promise.race()Permalink
여러 Promise 중 가장 먼저 완료된 Promise의 결과 반환
const promise1 = new Promise((resolve, reject) => {
setTimeout(resolve, 5000, "one");
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, "two");
});
Promise.race([promise1, promise2]).then((value) => {
console.log(value);
});
> two # 1초 후 출력. 5초 후 종료.
🚨 Promise.allSettled()Permalink
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) =>
setTimeout(reject, 1000, "foo")
);
const promises = [promise1, promise2];
Promise.allSettled(promises).then((results) =>
results.forEach((result) => console.log(result))
);
> { status: 'fulfilled', value: 3 } # 1초 후 한번에 출력
> { status: 'rejected', reason: 'foo' }
🚨 Promise.any()Permalink
const promise1 = Promise.reject(0);
const promise2 = new Promise((resolve) => setTimeout(resolve, 1000, "quick"));
const promise3 = new Promise((resolve) => setTimeout(resolve, 3000, "slow"));
const promises = [promise1, promise2, promise3];
Promise.any(promises).then((value) => console.log(value));
> quick # 1초 후 출력. 3초 후 종료. 더 빨리 resolve된 quick만 출력
댓글남기기