Promise
- 지금은 결과가 없더라도, 나중에 성공하거나 실패할 값에 대한 약속 객체
- 네트워크 요청은 시간이 걸리지만 JS는 그 결과를 기다리지 않음
- 그렇기에 Promise 객체를 이용하여 추후 데이터를 받아 사용 가능하도록 설정
//Promise 미사용 시
doA(() => {
doB(() => {
doC(() => {
console.log("끝");
});
});
});
//Promise 사용 시
doA()
.then(doB)
.then(doC)
.then(() => console.log("끝"))
.catch(console.error);
- 3가지 상태를 가짐
- pending
- fulfilled -> value(성공 = 값)
- rejected -> reason(실패 = 에러)
Thenable()
- then() 함수를 가진 객체
- Promise가 아니지만 Promise처럼 취급
//Thenable 예시
const obj = {
then(resolve, reject) {
resolve("완료");
}
};
- Promise는 Thenable를 보면 자동으로 실행함
resolve()
- Promise를 성공 상태로 만들고, 그 성공 값을 전달하는 함수
- resolve(value) 호출 시 :
- Promise 상태를 pending -> fulfilled로 바꿈
- 그 순간의 value를 Promise 결과로 저장
- .then()에 등록된 콜백들이 이 value를 받음
//resolve 예시
const p = new Promise((resolve, reject) => {
resolve("성공!");
});
p.then((v) => {
console.log(v);
});
"""
결과
성공!
"""
reject
- Promise를 실패 상태로 만들고 그 실패 이유(에러)를 전달하는 함수
- reject(error) 호출 시 :
- Promise 상태가 Pending -> rejected로 바뀜
- .catch() 또는 .then(..., onRejected)로 연결된 콜백이 실행됨
//reject 예시
const p = new Promise((resolve, reject) => {
reject("문제가 생김!");
});
p.catch((err) => {
console.log(err);
});
"""
결과
문제가 생김!
"""