Promise 클래스

자바스크립트 비동기 처리에 사용되는 객체로, 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 어떤함수 = () -> {}

then, catch, finally

Promise 객체의 후속 처리 메소드

Promise 코드 예제


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