비동기 작업을 표현하는 자바스크립트 객체
비동기 작업의 진행, 성공, 실패 상태를 표현
비동기 처리의 순서를 표현할 수 있음
new Promise()
로 프로미스를 생성하고 종료될 때까지 3상태를 갖음
1. Pending(대기)
비동기 처리 로직이 아직 완료되지 않은 상태
new Promise()
메서드를 호출하면 대기 상태가 됨
호출시 콜백 함수를 선언할 수 있고, 콜백 함수의 인자는 resolve
reject
이다
new Promise(function(resolve, reject) {
// ...
});
2. Fulfilled(이행)
비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
콜백 함수 인자 resolve
를 아래와 같이 실행하면 이행상태가 됨
이행 상태가 되면 then()
을 이용하여 처리 결과 값을 받을 수 있음
function getData() {
return new Promise(function(resolve, reject) {
var data = 100;
resolve(data);
});
}
// resolve()의 결과 값 data를 resolvedData로 받음
getData().then(function(resolvedData) {
console.log(resolvedData); // 100
});
3. Rejected(실패)
비동기 처리가 실패하거나 오류가 발생한 상태
reject
를 아래와 같이 호출하면 실패(Rejected) 상태가 되고 실패한 이유를 catch()
로 받을 수 있음
function getData() {
return new Promise(function(resolve, reject) {
reject(new Error("Request is failed"));
});
}
// reject()의 결과 값 Error를 err에 받음
getData().then().catch(function(err) {
console.log(err); // Error: Request is failed
});
Promise의 배열을 받아 모두 성공 시 각 Promise의 resolved 값을 배열로 반환
하나의 Promise라도 실패할 시, 가장 먼저 실패한 Promise의 실패 이유를 반환
Promise.all([
promise1,promise2,promise3
])
.then(values=> {console.log("모두성공: ", values)})
.catch(e=> {console.log("하나라도실패: ", e)})
프로미스는 여러 개의 프로미스를 연결하여 사용할 수 있는 체이닝이 가능
codepromise
.then(data=> {
returnfetchUser(data)
})
.then(user=> {
console.log('User : ', user)
})
.catch(e=> {
console.log("실패: ", e)
})