[JavaScript Deep Dive] 프로미스

DAYEON·2021년 7월 16일
0

JavaScript Deep Dive

목록 보기
3/6
post-thumbnail

등장 원인

JavaScript가 차지하는 범위가 늘어나고 이로인해 복잡도가 늘어남에 따라 콜백의 중첩이 발생하는 등의 문제들을 해결하기 위해


역할

  • 복잡한 구조의 비동기 처리 프로세스를 간결하고 정돈되게 만들어 주는 역할
  • 비동기 작업의 순차 처리, 병렬 처리 등을 처리하는데 보다 수월하고 가독성 높은 코드를 작성할 수 있도록 도와줌
  • Thread의 다중 요청에 대해 순차처리를 지원하는 중요한 개념

실행 순서

Promise → setTimeout

Microtask Queue vs Task Queue

  • Event Loop는 우선적으로 Microtask Queue를 확인한다.
  • 만약 Microtask Queue에 콜백이 있다면, 이를 먼저 Call Stack에 담는다.
  • 그리고 Microtask Queue에 더 이상 처리해야할 콜백이 없다면 Task Queue에 확인 후 처리한다.

Promise vs setTimeout

  • Promise의 then() 콜백은 Task Queue가 아닌 Microtask Queue에 담긴다.
  • 따라서 우선순위가 높은 Microtask Queue부터 처리되므로, Promise의 then() 콜백이 다 실행되고 setTimeout 콜백이 실행되는 것이다.

4가지 state 정의

Promise는 상태를 나타내기 위해 4가지의 state를 정의한다

  • Pending : Promise가 약속한 내용에 대해 대기하는 상태
  • Fulfilled : Promise가 약속한 내용이 정상적으로 처리된 상태
  • Rejected : Promise가 약속한 내용이 거절된 상태
  • Settled : Promise가 약속한 내용이 처리가 완료된 상태

대기 중인 프로미스는 값과 함께 이행이나 거부될 때, 프로미스에 연결한 처리기는 그 프로미스의 then 메서드에 의해 대기열에 오름. 이행했거나 거부된 프로미스에 연결한 처리기도 호출하므로, 비동기 연산과 처리기 연결 사이에 경합 조건은 없음.


생성자

  • Promise()

속성

  • Promise.length
    값이 언제나 1인 길이 속성

메서드

  • Promise.all(iterable)
    iterable 내의 모든 프로미스가 이행한 뒤 이행하고, 어떤 프로미스가 거부하면 즉시 거부하는 프로미스를 반환

  • Promise.race(iterable)
    iterable 내의 어떤 프로미스가 이행하거나 거부하는 즉시 스스로 이행하거나 거부하는 프로미스를 반환

  • Promise.reject()
    주어진 이유로 거부하는 Promise 객체를 반환

  • Promise.resolve()
    주어진 값으로 이행하는 Promise 객체를 반환
    값이 then 가능한 경우, 반환된 프로미스는 then 메서드를 따라가고 마지막 상태를 취함


profile
노력하는 초보 개발자

0개의 댓글