Promise
→ 콜백 함수의 단점(콜백지옥)을 보완하기 위해 ES6에 도입된 비동기 처리에 사용되는 객체
Promise
객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.
상태
대기(pending)
이행하지도, 거부하지도 않은 초기 상태.
이행(fulfilled)
연산이 성공적으로 완료 → 결과값 반환
거부(rejected)
연산이 실패 → 에러 반환
메서드
promise.then()
- resolve / reject 상태일 때 호출
- 매개변수: resolved일 때 실행할 함수, rejected일 때 실행할 함수
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject('ERROR!');
}, 3000);
});
promise.then((value) => console.log(value));
promise.catch()
- rejected 상태이거나 에러가 발생했을 때 실행(에러 핸들링)
- 매개변수: 에러가 발생했을 때 실행할 함수
const promise = new Promise((resolve, reject)=>{
setTimeout(()=>{
reject("ERROR!");
}, 3000);
});
promise
.then(result => console.log(result))
.catch(error => console.log(error));
promise.finally()
- Promise의 resolve / reject 결과와 상관 없이 지정된 함수 실행
const promise = new Promise((resolve, reject) => {
setTimeout(resolve, 2000, "First");
});
promise
.then(result => console.log(result))
.finally(() => console.log("End"));
Callback VS Promise
Callback
getPost(
postNum,
(postId) => {
console.log('Post', postId);
getComments(
postId,
(result) => {
console.log('Comments:' , result)
},
(message) => {
console.log(message);
}
)
},
(message) => {
console.log(message);
}
)
→ 콜백이 중첩되면서 콜백 지옥 발생 가능성
→ 에러 핸들링 제공 X
Promise
getPost(postNum)
.then(postId => {
console.log('Post:', postId)
return getComments(postId)
})
.then(result => console.log('Comments:', result))
.catch(message => console.log(message));
→ 중첩 없이 연속적 비동기 작업 처리
→ .catch()
문을 통해 에러 핸들링
→ .then() 지옥
의 가능성
references
👉 https://velog.io/@syoung125/JS-Promise%EB%9E%80