- 프로미스는 new Promise로 생성하는데, 인수는 resolve와 reject
- resolve는 성공한 경우, reject는 실패했을 때 실행되는 콜백함수
- new Promise 생성자가 반환하는 프로미스 객체는 state와 result를 프로퍼티로 가짐
- state는 초기에 pending이었다가 resolve가 호출되면 fulfilled가 되고, result는 resolve에 전달된 값을 가짐
- 반면, reject가 호출되면 state는 rejected가 되고 result는 reject함수에 전달된 error가 됨
- then을 이용해서 resolve와 reject를 처리할 수 있음.
- 첫 번째 인수는 프로미스가 이행되었을 때 실행되는 함수로, result에는 ‘OK’라는 값이 들어감
- 두 번째 인수는 프로미스가 거부되었을 때 실행되는 함수로, err에는 error값이 들어감
- then 이후에 사용할 수 있는 것으로 catch와 finally가 있음
- catch는 error가 발생하는 경우, 즉 reject인 경우에만 실행됨
- finally는 이행이나 거부의 처리가 완료되면 항상 실행됨 (로딩 화면 같은 것을 없앨 때 유용)
depth가 깊어지면서 콜백을 호출하는 것을 callback hell, 콜백지옥이라고 부름
프로미스를 사용해서 작성하면 다음과 같아지고, 이렇게 프로미스로 연결되어 있는 것을 Promise chaining(프로미스 체이닝)이라고 함
하지만 이렇게 사용하면 시간이 너무 오래 걸림
→ Promise.all을 사용하여 시간을 단축시킬 수 있음
→ Promise.all을 사용하면 작업을 동시에 시작해서 모든 작업이 완료되면 그 값을 사용할 수 있음
→ 그래서 Promise.all을 사용했을 때 가장 긴 작업인 f2의 3000ms(3초)정도 걸렸고, 각 promise로 넘겨준 값들이 배열로 들어옴
→ 그냥 promise chaining으로 실행된 부분은 각 프로미스가 1000ms, 3000ms, 2000ms이기 때문에, 전체 6000ms정도 걸려서 작업이 완료됨
하지만 Promise.all은 하나의 작업이라도 reject되면 error가 발생함
Promise.race는 Promise.all이랑 비슷하게 모든 작업이 동시에 시작되지만, 하나라도 완료되면 바로 종료됨
↓ [코딩앙마] 자바스크립트 중급 강좌 링크
https://www.youtube.com/watch?v=3Ao3OroqQLQ
'Study > JavaScript' 카테고리의 다른 글
[JavaScript] 중급 #17 - async, await (0) | 2021.10.19 |
---|---|
[JavaScript] 문자열을 배열로, 배열을 문자열로 (0) | 2021.10.08 |
[JavaScript] 중급 #15 - 클래스(Class) (0) | 2021.10.02 |
[JavaScript] 중급 #14 - 상속, 프로토타입(Prototype) (0) | 2021.10.02 |
[JavaScript] 배열 정렬하기, sort() (0) | 2021.09.26 |