Promise
비동기 작업을 처리할 때 사용되는 객체
서버 요청, 파일 읽기, 타이머 같은 작업이 완료되거나 실패했을 때 결과 여부를 알 수 있다.
주로 콜백 함수의 복잡함을 줄이고, 비동기 코드를 좀 더 가독성 좋게 작성할 수 있도록 도와줌
1. Promise의 상태
Promise 객체는 세 가지 상태를 가진다.
- Pending (대기 중): 초기 상태로, 비동기 작업이 아직 완료되지 않은 상태
- Fulfilled (성공): 작업이 성공적으로 완료되어 결과 값을 반환한 상태
- Rejected (실패): 작업이 실패하여 에러가 발생한 상태
2. Promise 사용법
const myPromise = new Promise((resolve, reject) => {
const success = true; // 예시 조건
if (success) {
resolve("작업 성공!");
} else {
reject("작업 실패!");
}
});
Promise는 new Promise를 사용하여 생성하며,
두 개의 콜백 함수, resolve와 reject를 인자로 받는다.
resolve는 작업이 성공적으로 완료될 때 호출되며, reject는 작업이 실패할 때 호출한다.
3. then과 catch를 사용한 결과 처리
// 2. promise 사용법 코드 이후
myPromise
.then((result) => {
console.log(result); // "작업 성공!"이 출력됨
})
.catch((error) => {
console.error(error); // "작업 실패!"가 출력됨
});
then 메서드는 작업이 성공했을 때 실행
catch 메서드는 작업이 실패했을 때 실행
위에 2번 코드에 적용할 시 콘솔창에는 "작업 성공!" 출력
4. finally 메서드
myPromise
.then((result) => console.log(result))
.catch((error) => console.error(error))
.finally(() => console.log("작업 완료!"));
finally는 작업의 성공 여부와 상관없이 항상 실행
주로 작업 종료 후에 해야 할 정리 작업이 있을 때 유용하다.
5. 여러 개의 Promise 처리하기
Promise.all
여러 개의 Promise를 병렬로 실행하고, 모두 완료될 때까지 기다린 후 결과를 한 번에 반환,
하나라도 실패하면 전체가 실패
const promise1 = Promise.resolve("첫 번째 작업");
const promise2 = Promise.resolve("두 번째 작업");
Promise.all([promise1, promise2])
.then((results) => console.log(results)) // ["첫 번째 작업", "두 번째 작업"]
.catch((error) => console.error(error));
Promise.race
Promise 배열 중 가장 먼저 완료된 Promise의 결과를 반환
const promiseA = new Promise((resolve) => setTimeout(() => resolve("A 완료"), 1000));
const promiseB = new Promise((resolve) => setTimeout(() => resolve("B 완료"), 500));
Promise.race([promiseA, promiseB])
.then((result) => console.log(result)); // "B 완료"
Promise는 비동기 작업의 성공 또는 실패 결과를 반환하는 객체
then, catch, finally를 통해 Promise 결과를 처리
Promise.all, Promise.race 등으로 여러 Promise를 동시에 처리
'JS' 카테고리의 다른 글
| 변수 var / let / const (0) | 2024.11.12 |
|---|---|
| async/await (0) | 2024.11.11 |
| 컨텍스트를 가리키는 키워드 this (0) | 2024.10.30 |
| Math : 표준 빌트인 객체 (0) | 2024.10.24 |
| 화살표 함수 (0) | 2024.10.17 |