๐
Promise
December 21, 2022
Promise๋?
- โ
Promise
๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์กฐ๊ธ ๋ ์์ํ๊ฒ ์ฒ๋ฆฌํ๊ฒ๋ ๋์์ฃผ๋ ์ถ์ํ๋ ์ํํธ์จ์ด ๊ฐ๋ โ - ์ฝ๋ฐฑ์ง์ฅ์ ํด๊ฒฐํ๊ธฐ ์ํด
ES6
์์ Promise๋ก ์ง์ํ๊ฒ ๋์๋ค. - Promise์ ํต์ฌ์ ๋น๋๊ธฐ์์ ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๋ถ๋ฆฌํด์ ๋ฉ์๋๋ฅผ ์ํํ๋ฉฐ,
์๋ฌํธ๋ค๋ง์ด ๊ฐ๋ฅ
ํ๋ค๋ ์ ์ด ์๋ค. - Promise๋
๋๊ฐ์ง ์ธ์๋ฅผ ๋ฐ๋๋ฐ
, ๋น๋๊ธฐ์์ด ์ ์์ ์ผ๋ก ์คํ๋๋ค๋ฉดresolve
๋ฅผ ๋น์ ์์ ์ผ๋ก ์คํ๋๋ค๋ฉด ๋๋ฒ์งธ ์ธ์์ธreject
๋ฅผ ํธ์ถํ๋ค.
Promise๋ฅผ ํธ์ถํ ์ด์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ 3๊ฐ์ง
- then: reslove()๋ฅผ ํตํ ๋ฆฌํด ๊ฐ
- catch: reject()๋ฅผ ํตํ ๋ฆฌํด ๊ฐ
- finally: ์คํ ์ฌ๋ถ์ ์๊ด์์ด ์ดํ ์ด๋ฒคํธ ์คํ
๊ฐ์ฅ ํฐ ์ฅ์
์ผ๋ก๋
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ฆ๊ฐ
- ๋ฐ๋ณตํด์ ์ฌ์ฌ์ฉํ๋ ์์ธ์ฒ๋ฆฌ ์์ ์ด ์ค์ด๋ฌ
throw
๋ฅผ ์ฌ์ฉํ๋ฉดerror
์ํฉ์ ์ฝ๊ฒ ์ฐพ์๋ด์๋ฌ ํธ๋ค๋ง์ด ํ๊ฒฐ ํธํด์ง
ํ๋ฒ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํด์ผ๋๋ ๊ฒฝ์ฐ
- Promise.all
- ํ๋ก๋ฏธ์ค๊ฐ ๋ด๊ฒจ ์๋ ๋ฐฐ์ด ๋ฑ์ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ
์ ๋ฌ๋ฐ์ ๋ชจ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ
ํ๊ณ ๊ทธ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ๋ ์๋ก์ด ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค. - ์ ๋ฌ๋ฐ์ ๋ชจ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค. ์ด๋ ๋ชจ๋ ํ๋ก๋ฏธ์ค์ ์ฒ๋ฆฌ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ๋ชจ๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolve ๋๋ reject ํ๋ค.
- ํ๋ก๋ฏธ์ค๊ฐ ๋ด๊ฒจ ์๋ ๋ฐฐ์ด ๋ฑ์ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ
Promise.all([
new Promise((resolve) => setTimeout(() => resolve(1), 3000)), // 1
new Promise((resolve) => setTimeout(() => resolve(2), 2000)), // 2
new Promise((resolve) => setTimeout(() => resolve(3), 1000)), // 3
])
.then(console.log) // [ 1, 2, 3 ]
.catch(console.log);