본문 바로가기

JAVASCRIPT

자바스크립트 Promise

프로미스란?

비동기 처리 상태와 처리 결과를 관리하는 객체

 

const promiseFunc = new Promise((resolve, reject) => {
    비동기 처리 수행
    if (처리 결과 성공) {
    	resolve(결과 값)
    } else {
    	reject(new Error(에러))
    }
})

프로미스 생성자는 콜백 함수를 인자로 받는다.

콜백함수 내부에서는 비동기 처리를 수행하고, 성공 여부에 따라 resolve 또는 reject 함수를 호출한다. 

 

resolve나 reject가 호출되면 프로미스의 상태가 변한다.

비동기 처리가 진행 중일 때 프로미스의 상태 pending에서, resolve가 호출되면 fulfilled, reject가 호출되면 rejected 상태로 변한다.

Fulfilled, rejected 상태는 settled 상태라 한다. Settled 상태가 되면 이후에 다른 상태로 변하지 않는다.

 

모든 상태는 result 값을 갖는다.

Pending 상태일 때는 undefined, fulfilled 상태일 때는 resolve 함수 호출 시 전달했던 비동기 처리의 결과 값, reject 상태일 때는 reject 함수 호출 시 전달했던 에러다.

 

promiseFunc()
.then(() => {...})
.catch((e) => {...})
.finally(() => {...})

프로미스 상태가 변하면 후속처리 메서드 then, catch, finally에 인수로 전달된 콜백함수가 호출된다.

 

후속처리 메서드의 콜백함수는 마이크로 태스크 큐에 저장된다.

마이크로 태스크 큐는 태스크 큐보다 우선순위가 높다. 이벤트 루프는 실행 컨텍스트 스택이 비면 마이크로 태스크 큐의 함수를 실행하고, 마이크로 태스크 큐마저 비게 되면 태스크 큐의 함수를 실행한다.

'JAVASCRIPT' 카테고리의 다른 글

Javascript Objects vs. Maps  (0) 2022.01.30
DOM과 Virtual DOM  (0) 2022.01.16
자바스크립트 가비지 콜렉션과 순환참조  (0) 2021.12.10
자바스크립트 Execution Context  (0) 2021.12.08
자바스크립트 변수 호이스팅  (0) 2021.12.04