자바스크립트 비동기 처리에 사용되는 객체로, Promise 생성자 함수를 통해 인스턴스화 한다. Promise 생성자 함수는 비동기 처리를 수행할 콜백 함수를 인자로 가지며, 해당 콜백 함수는 다시 resolve와 reject 함수를 인자로 가진다.
const promise = new Promise(function(resolve, reject) {
// executor (실행 함수)
};
Promise는 비동기 처리가 성공(fulfilled)하였는지, 실패(rejected)하였는지 등의 상태(state) 정보를 가진다. 실행 함수(executor)가 끝나면 resolve 또는 reject 함수를 호출하는데, 이때 Promise의 상태가 변하게 된다.
상태 (state) | 의미 | 구현 |
---|---|---|
대기 (pending) | 비동기 처리가 아직 수행되지 않은 상태 | resolve 또는 reject 함수가 아직 호출되지 않은 상태 |
이행 (fulfilled) | 비동기 처리가 수행된 상태 (= 성공) | resolve 함수가 호출된 상태 |
거부 (rejected) | 비동기 처리가 수행된 상태 (= 실패) | reject 함수가 호출된 상태 |
이행 또는 거부 (settled) | 비동기 처리가 수행된 상태 (성공 / 실패) | resolve 또는 reject 함수가 호출된 상태 |
즉, new Promise
생성자가 반환하는 promise
인스턴스의 상태(state)는 pending
이고,
실행 함수가 끝난 뒤 resolve
가 호출되면 fulfilled
, reject
가 호출되면 rejected
로 변한다.
const promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("완료"), 1000);
});
const promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("에러 발생!")), 1000);
});
function 어떤함수() {
}
const 어떤함수 = () -> {}
Promise 객체의 후속 처리 메소드
.then()
.catch()
.finally()
const a = () => {
return new Promise(resolve => {
setTimeout(() => {
console.log(1);
resolve(); // b();
}, 1000)
})
}
const b = () => console.log(2);
a().then(b); // a().then(() => { b() });
// 1
// 2