December 21, 2020
๋ธ๋ผ์ฐ์ ์์์ ๋ํ ๋น๋๊ธฐ API - setTimeout, setInterval
part-1/index.html ์ ๋ธ๋ผ์ฐ์ ์์ ์ด์ด๋ณด๊ณ , callback, promise, async & await ๋ฒํผ์ ๊ฐ๊ฐ ํด๋ฆญํด๋ณด์ธ์.
์ด ๋ฒํผ๋ค์ ์ ํํ ๋์ผํ ์ก์ ์ ํ์ง๋ง, ๊ทธ ๊ตฌํ ๋ฐฉ๋ฒ์ ์กฐ๊ธ์ฉ ๋ค๋ฆ ๋๋ค.
์๋์ ๋์ผํ๊ฒ ๋์ง๋ง ๋ด๋ถ ์ฝ๋๊ฐ ๋ค๋ฅด๋ค๋ก ์ดํด.
โบcallback ๋ฒํผ์ runCallback ํจ์๋ฅผ ์คํํฉ๋๋ค.
delay ๋ผ๋ ํจ์๋ 01_callback.js ์ ์ ์ธ๋์ด ์๋ค.
์ค~ delay ํจ์๋ wait ๊ณผ callback ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์ ๋ค์ setTimeout ํจ์๋ฅผ ๋ฆฌํดํ๋๊ตฌ๋!
1์ด ๋ค์ pauseVideo(), displayTitle() ์ ์คํํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ delay ํจ์๋ฅผ ์คํํ๋๋ฐ, 0.5์ด ๋ค์ highlightTitle() ์ ์คํํ๊ฒ ๋๊ณ ,
๊ทธ๋ฆฌ๊ณ ๋ค์ delay ํจ์๊ฐ ์คํ๋๋๋ฐ, 2์ด ๋ค resetTitle() ์ด ์คํ๋๋ ๊ตฌ์กฐ์ ํจ์์ด๋ค.
โฉcallback ํจ์์ ํํ๊ฐ curly bracket ์ผ๋ก ๋ง๋ค์ด์ง๋ ์ฝ๋ ๋ธ๋ก์ด๋ผ๋ ์ ์ ์ ์ฌํ ๋ด์ผ ํ๋ค.
โบpromise ๋ฒํผ์ runPromise ํจ์๋ฅผ ์คํํฉ๋๋ค.
์ ์๋ runPromise() ํจ์ ๋ด์๋ sleep ์ด๋ผ๋ ํจ์๊ฐ ๋ค์ด ์๋ค.
sleep ํจ์๋ 02_promiseConstructor.js ์ ์ ์๋์ด ์๋ค.
์ค~ sleep ์ด๋ผ๋ ํจ์๋ wait ์ด๋ผ๋ ์ธ์๋ง ๋ฐ๋ค? ์ด? ์๊น ์์ delay ํจ์๋ wait ์ธ์ ๋ฟ๋ง ์๋๋ผ callback ํจ์๋ ์ธ์๋ก ๋ฐ์๋๋ฐ ๋ง์ด๋ค?!
์ฌํผ sleep ํจ์๋ wait ์ธ์ ๋ง์ ๋ฐ๊ณ promise ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค.
promise ๊ฐ์ฒด๋ ์ธ์๋ก executor ๋ผ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํด ์ฃผ๊ฒ ๋๋๋ฐ,
์ด ์ฝ๋ฐฑ ํจ์์๋ ๋ ๋ค๋ฅธ 2๊ฐ์ง์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฒ ๋๋ค. ๊ทธ๊ฒ ๋ฐ๋ก ย resolve ์ reject ํค์๋ ์ด๋ค.
โข resolve : ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ์ํํด์ ๋ง์ง๋ง์ ์ต์ข ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฝ๋ฐฑํจ์
โข reject : ๊ธฐ๋ฅ์ ์ํํ๋ค ์ค๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ํธ์ถํ๊ฒ ๋ ์ฝ๋ฐฑํจ์
โฉ์ฌ๊ธฐ์๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์ํ ๋ ๋ setTimeout api ๋ฅผ ๋ฆฌํด(์คํ) ํ๊ฒ ํ๋ค.์ด๋ป๊ฒ?
setTimeout ์ ์ฒซ๋ฒ์งธ ์ธ์์ resolve ํจ์๋ฅผ ํ์์!
โบasync & await ๋ฒํผ์ runAsync ํจ์๋ฅผ ์คํํฉ๋๋ค.
๋น๋๊ธฐ์ ์ธ ์์ด๋ค์ ๋ง์น ๋๊ธฐ์ ์ผ๋ก(?) ์คํ ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ํด ์ฃผ๋ โsyntactic sugarโ
๋ง์น ๋ชจ๋ ๋ก์ผ๋ค์ด ๋ฐ์ฌ ์ค๋น๋ฅผ ๋ค ๋ง์น ์ํ ์์ (๋ฒํผํ๋๋๋ฅด๋ฉด์ง๊ตฌ๊ฐ๋ฉธ๋ง) await ์ด๋ผ๋ ์ ๊ธ?์ฅ์น๋ฅผ ๊ฑธ์ด ๋จ๋ค๊ฐ ์ฒซ๋ฒ์งธ ๋ก์ผ ๋ถํฐ ๋ฐ์ฌ์์ผ ๋๊ฐ๋ ๋๋์ด๋๊น?
delay ํจ์๋ ์ธ์๋ก wait ๊ณผ callback ํจ์๋ฅผ ๋ฐ์ง๋ง,
sleep ํจ์๋ ์ธ์๋ก wait ๋ง์ ๋ฐ๊ณ new Promise ๋ก ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํฉ๋๋ค.
์ด ํ๋ก๋ฏธ์ค ๊ฐ์ฒด๋ executor ๋ผ๋ ์ฝ๋ฐฑํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ณ , ์ด ์ฝ๋ฐฑํจ์์ ์ธ์๋ก๋ resolve, reject ๋ผ๋ ์ฝ๋ฐฑํจ์๊ฐ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
runAsync ํจ์๋ async ๋ฐ await ํค์๋์ ์ฌ์ฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
๋น๋๊ธฐ ํจ์์ ํ๋ฆ์ด ๋ง์น ๋๊ธฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ฒ๋ผ ๋ณด์ ๋๋ค.
ํ์ง๋ง, ์ค์ ๋ก๋ Promise๋ฅผ ์ด์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ, ์ฝ๋ ์์์๋ถํฐ ์๋๋ก, ์๊ฐ์ ํ๋ฆ๋๋ก ์งํ๋ฉ๋๋ค.
promise ๊ฐ์ฒด๋ ์ธ์๋ก executor ๋ผ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํด ์ฃผ๊ฒ ๋๋๋ฐ, ์ด ์ฝ๋ฐฑ ํจ์์๋ ๋ ๋ค๋ฅธ 2๊ฐ์ง์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฒ ๋๋ค.
๊ทธ๊ฒ ๋ฐ๋ก ย resolve ์ reject ํค์๋ ์ด๋ค.
โข resolve : ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ์ํํด์ ๋ง์ง๋ง์ ์ต์ข ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฝ๋ฐฑํจ์
โข reject : ๊ธฐ๋ฅ์ ์ํํ๋ค ์ค๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ํธ์ถํ๊ฒ ๋ ์ฝ๋ฐฑํจ์
resolve ์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์ํ๋์ด ๋์จ ์ต์ข ๋ฐ์ดํฐ๊ฐ ์ธ์๋ก ๋ด๊ธด๋ค. ์ฌ๊ธฐ์๋ โhelloโ ๋ผ๋ ๋ฌธ์์ด ์ด์๋ค.
์ด์ promise ์คํ ํจ์๋ฅผ ์จ๋จน๋ consumer ํจ์์์ .then ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ด์ด ๋ฐ์ (๋ฐ์ดํฐ๋ฅผ ๋ฆฌํด ๋ฐ์์) ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ๋ฐ ๊ฐ๊ณต์ ํ๋ค.
reject ํจ์๋ .catch ๋ฅผ ํตํด ์๋ฌ ๋ฅผ ๋ฆฌํดํ๊ฒ ๋๋ค.
callback ์ ํตํ ๋น๋๊ธฐ ์ฒ๋ฆฌ์์๋ ์คํํ ๋๋ง๋ค ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ๋๋ค๊ณ ํ๋๋ฐ, Promise ๋ฅผ ํตํ ๋น๋๊ธฐ ์ฒ๋ฆฌ์์๋ consumer ํจ์์์ ์ ์ผ ๋ง์ง๋ง ๋ถ๋ถ์์ .catch ๋ฅผ ํตํด ํ ๋ฒ๋ง ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ์๋ฌ๋ฅผ ํธ๋ค๋งํ ์ ์๋ค.
.then, .catch ์ธ์๋ .finally ๋ผ๋ ํค์๋๋ ์๋ค.
์๋ consumer ํจ์ ๋ง์ง๋ง์ ์์ฑํด ์ฃผ๋๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฑด ์ด์ฉ๊ฑด ๋ฌด์กฐ๊ฑด ๋ง์ง๋ง์ ํธ์ถ๋์ด ์ง๋ค. ์ด๋ค ๊ธฐ๋ฅ์ ๋ง์ง๋ง์ ์ํํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
โข ๋๊ธฐ(pending): ์ดํํ๊ฑฐ๋ ๊ฑฐ๋ถ๋์ง ์์ ์ด๊ธฐ ์ํ.
โข ์ดํ(fulfilled): ์ฐ์ฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋จ.
โข ๊ฑฐ๋ถ(rejected): ์ฐ์ฐ์ด ์คํจํจ.
ํด๋น ํจ์๊ฐ Promise ํ์ ์ ๋ฆฌํดํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฌดํฑ๋๊ณ ์๋ ์ฝ๋ ์ฒ๋ผ,
async setTimeout(() => {
console.log('๋๋ ๋น๋๊ธฐ');
} ,1000)
๋น๋๊ธฐ ํจ์๋ผ๊ณ setTimeout ์์ async ๋ฅผ ๋ถ์ธ๋ค ํด์ ๋๊ธฐ์ ์ผ๋ก ์ธ ์ ์๊ฒ ๋๋ ๊ฒ์ด ์๋๋ผ๋ ์๋ฏธ ์ด๋ค.