-  프로미스는 new Promise로 생성하는데, 인수는 resolve reject

  -  resolve는 성공한 경우, reject는 실패했을 때 실행되는 콜백함수

 

  -  new Promise 생성자가 반환하는 프로미스 객체는 state result를 프로퍼티로 가짐

  -  state는 초기에 pending이었다가 resolve가 호출되면 fulfilled가 되고, result resolve에 전달된 값을 가짐

  -  반면, reject가 호출되면 staterejected가 되고 result reject함수에 전달된 error가 됨

 

  -  then을 이용해서 resolvereject를 처리할 수 있음.

  -  첫 번째 인수는 프로미스가 이행되었을 때 실행되는 함수로, result에는 ‘OK’라는 값이 들어감

  -  두 번째 인수는 프로미스가 거부되었을 때 실행되는 함수로, err에는 error값이 들어감

 

  -  then 이후에 사용할 수 있는 것으로 catchfinally가 있음

  -  catch error가 발생하는 경우, reject인 경우에만 실행됨

  -  finally는 이행이나 거부의 처리가 완료되면 항상 실행됨 (로딩 화면 같은 것을 없앨 때 유용)

 

 

depth가 깊어지면서 콜백을 호출하는 것을 callback hell, 콜백지옥이라고 부름

 

 

프로미스를 사용해서 작성하면 다음과 같아지고, 이렇게 프로미스로 연결되어 있는 것을 Promise chaining(프로미스 체이닝)이라고 함

하지만 이렇게 사용하면 시간이 너무 오래 걸림

  →  Promise.all을 사용하여 시간을 단축시킬 수 있음

 

 

  →  Promise.all을 사용하면 작업을 동시에 시작해서 모든 작업이 완료되면 그 값을 사용할 수 있음

  →  그래서 Promise.all을 사용했을 때 가장 긴 작업인 f23000ms(3)정도 걸렸고, promise로 넘겨준 값들이 배열로 들어옴

  →  그냥 promise chaining으로 실행된 부분은 각 프로미스가 1000ms, 3000ms, 2000ms이기 때문에, 전체 6000ms정도 걸려서 작업이 완료됨

 

하지만 Promise.all은 하나의 작업이라도 reject되면 error가 발생함

 

Promise.racePromise.all이랑 비슷하게 모든 작업이 동시에 시작되지만, 하나라도 완료되면 바로 종료됨

 

 

 

 

 

↓ [코딩앙마] 자바스크립트 중급 강좌 링크

https://www.youtube.com/watch?v=3Ao3OroqQLQ 

 

 

+ Recent posts