์ฝ๋ฐฑํจ์ -> ์ฝ๋ฐฑ์ง์ฅ -> Promise ๋ฑ์ฅ -> Promise ์ง์ฅ -> async & await ๋ฑ์ฅ
-> Promise Chaining
-> Promise.all() ;
-> Promise.race() ;
[โ] ๋น๋๊ธฐ ํต์ ํ๋ ์ด์ : ๋ฌด๊ฑฐ์ด ์ผ์ ํ ๋ ( ํฐ ํ์ผ์ ์ฝ์ ๋)
๋๊ธฐํต์ ์ด๋ผ๋ฉด, ์ฝ๋ ๋์ ์๋ฌด ์์
์ ํ์ง ๋ชป ํ ๊ฒ (์ฌ์ฉ์ํ๊ฒฝ,๊ฒฝํ โ)

[โจํคํฌ์ธํธ]
โ ์ํ(state)์ ํ๋ฆ
โก produer / consumer ์ ๊ฒฌํด์ ๋ฐ๋ฅธ ์ฐจ์ด์ ์ดํด
โฝ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ํํด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด๋ด๋ produer
โฝ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ consumer
๐ต const promise = new Promise()
๐ก Promise ์์ฑ์, ์์ํํฐ(executor) ํจ์ ์ฆ์ ์๋ ์คํ
๐ต ์์ํํฐ(executor)๋ 2๊ฐ์ ์ธ์ (resolve, reject) ๊ฐ์ง๊ณ ์์
โญ ์ด๊ธฐ ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ฅผ ์์ฑ์, ์์ํํฐ(executor)๊ฐ ํ ๋ฒ ์คํ ๋จ
โญ ์์ํํฐ(executor) : ํ๋ก๋ฏธ์ค์ ์ํ๋ฅผ ๊ฒฐ์ ์ง๋ ํจ์
: ๐ข์ฑ๊ณต์ resolve(value) ๊ฐ ๋ฐํ
: ๐ด์คํจ์ reject(error) ๋ฐํ
โญ ์์ํํฐ๋ ( resolve, reject ) 2๊ฐ์ ์ฝ๋ฐฑํจ์๋ฅผ ๊ฐ์ง๊ณ ์์

โจ Promise ๊ฐ์ฒด ์์ฑ์, ์์ํํฐ(executor) ํจ์ ์ฆ์ ์๋ ์คํ ๋๋ค !
โจ ์์ํํฐ(executor) ํจ์๋, ( resolve, reject ) 2๊ฐ์ ์ธ์๋ฅผ ๊ฐ๋๋ค !
๐ข resolve(value) : ์ฑ๊ณต์, ๊ฐ์ ธ์ฌ ๊ฐ
๐ด reject(error) : ์คํจ์, ๊ฐ์ ธ์ฌ ์๋ฌ๊ฐ

โญ promise๊ฐ์ฒด.then() : Promise๊ฐ ์ ์์ ์ผ๋ก ์ํ๋์ ๊ฒฝ์ฐ,
๐ข๊ฒฐ๊ณผ๊ฐ(resolve(๐ขvalue)์ ๐ขvalue ๊ฐ์ ๊ฐ์ ธ์จ๋ค.)
โญ promise๊ฐ์ฒด.catch() : Promise๊ฐ ์คํจํ์ ๊ฒฝ์ฐ,
๐ด์๋ฌ๊ฐ(reject(๐ดerror)์ ๐ดerror ๊ฐ์ ๊ฐ์ ธ์จ๋ค.)
โญ promise๊ฐ์ฒด.finally() : ์ฑ๊ณตํ๊ฑฐ๋, ์คํจํ๋๋ผ๋ ํญ์ ์คํ !



[ ๐ซ ์๋ฌ ํ๊ตฌ ]
.catch ์์ด, promise ๋ถ๋ถ์์ reject(error) ๋ฐ์ ์, ์์ ๊ฐ์ ์ค๋ฅ๋ฐ์
Uncaught Error : ์ก์ ์ ์๋ ์๋ฌ
โ๏ธ Error Handling ๋ํ, ์ฐ๊ตฌํ๊ณ ๊น๊ฒ ํ๋ด์ผ ํ ๋ฏ . . !!
(๋ผ๊ณ ๋งํ๋๊น, ๋ฐ์ ๋ฐ๋ก ์์ ๋ค๋ฃจ๋ ์ค..๐)

ํ๋ก๋ฏธ์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฐ์์ ์ผ๋ก ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ
ํ๋ก๋ฏธ์ค ๊ฐ์ฒด์ ๋ฉ์๋(then, catch, finally)๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ
๋น๋๊ธฐ ์์ ์ ์์ฐจ์ ์ผ๋ก ์งํํ ์ ์๋ค.

[ โโ ] ํ๋ก๋ฏธ์ค ์ฒด์ด๋์ ๊ฐ ๋ฉ์๋(then, catch, finally)๊ฐ
๊ฐ์ ๋ฐํํ ์ ์๊ณ , ๋ ๋ค๋ฅธ ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์๋ค ! . .







getEgg ๋ถ๋ถ์์ reject(error) ๋ก ๋ณ๊ฒฝ์,
์๋ฌ ๋ฐ์ ํ, ์ฒด์ด๋ ์งํ์ด ๋ฉ์ถค
-> ์๋ฌ ๋ฐ์ ๋ถ๋ถ ๋ฐ๋ก ๋ค์์์ .catch ์์ฑ ํ ์๋ฌ ์ฒ๋ฆฌ ์งํํจ !
์์ธํ ์ฌ์ฉ๋ฒ ๐ค
: https://velog.io/@supernova77/Node.js-02-async-await