๋ฌธ์ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ก์ง์์๋ต์ https://github.com/pul8219/TIL
Issues
ํญ์ ์๋ง์ step ์ด์์์ ๋จ๊ฒจ์ฃผ์ธ์. โก๏ธ Issueํญ์ผ๋ก ์ด๋
- ์์ฑ์: Wol-dan (@pul8219)
- ์คํฐ๋ ์ฃผ์ : FrontEnd ๋ฉด์ ์คํฐ๋ https://gitlab.com/siots-study/topics/-/wikis/home
- ๊ณต๋ถ ๋ฒ์: Asyncronous โก๏ธ Motivation - ํ์ด๋จธ API, ๋ธ๋ผ์ฐ์ ์ Javascript ์ฝ๋ ์คํ ๊ณผ์ , ๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ HTTP ํต์ ์ ํ ๋
- ๊ธฐํ: 8/29(ํ ) ~ 9/1(ํ)
- async / await
- Javascript ๋ฐํ์์ ์ด๋ฃจ์ด์ง๋ ์ผ๋ค
- Promise ๊ด๋ จ ์ถ๊ฐ ๋ฉ์๋
- map ๋ฉ์๋
- promise ์์ ์์ ํจ์ ์ธ์๋ก ๋๊ฒจ์ฃผ๊ฑฐ๋ () => ๊ฐ์ด ๋ค์ด๊ฐ์์ ๋ ๋ช ํํ? ์๋ฏธ๋ฅผ ๋ ์ดํดํ ํ์๊ฐ ์์
setTimeout()
๋ฑ์ ํ์ด๋จธ๋ ์ฝ๋ฐฑ์ ๋น๋๊ธฐ์ ์งํ ์์ธํ- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ์๋ชป ์๊ณ ์๋ ์ฌ์ฉ๋ฒ ๊ณ ์น๊ณ ์ ๋๋ก ์๊ธฐ https://flik.tistory.com/53
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
setTimeout()
,clearTimeout()
setInterval()
,clearInterval()
- ms(๋ฐ๋ฆฌ ์ด) ๋จ์์ด๋ค.(1000ms = 1s)
setTimeout()
๊ณผ,setInterval()
์ ๊ฐ๊ฐ ํ์ด๋จธ ์๋ณ์๋ฅผ ๋ฐํํ๋ค. ์ด ์๋ณ์๋ฅผ ํตํด ์คํ ์ค์ธ ํ์ด๋จธ๋ฅผ ์ทจ์ํ ์ ์๋ค.- ์ ํํ ์ง์ฐ ์๊ฐ์ ๋ณด์ฅํด์ฃผ์ง ์๋๋ค.
// ๋งค๊ฐ๋ณ์๊ฐ ์๋ ํ์ดํ ํจ์ ๋ฌธ๋ฒ ์ด์ฉ
const timeoutId = setTimeout(() => {
console.log('setTimeout์ด ์คํ๋์ง 3์ด๊ฐ ์ง๋จ');
}, 3000);
clearTimeout(timeoutId); // clearTimeout์ผ๋ก setTimeout()์ ๋ฐํ๊ฐ์ธ ์๋ณ์๋ฅผ ์ ๋ฌํ๋ฉด ํ์ด๋จธ๊ฐ ์ทจ์๋๋ค.
-
Javascript ์์ง์ ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ํธ์ถ ์คํ(Call Stack)์ด๋ผ๋ ์คํ ํํ์ ์ ์ฅ์์ ๊ด๋ฆฌํ๋ค.
-
ํธ์ถ ์คํ์ ์ ์ฅ๋๋ ๊ฐ ํญ๋ชฉ์
์คํ ์ปจํ ์คํธ
๋ผ๊ณ ํ๋ค.
-
ํธ์ถ ์คํ์ ์์ ์ด ์กด์ฌํ๋ ๋์ ์น ๋ธ๋ผ์ฐ์ ๋ ๋จนํต์ด ๋๋ค.
-
ํธ์ถ ์คํ์ ์์ ์ด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ ๋๋ฉ์ด์ ์ด ๋๊ธฐ๋ ๋ฑ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์ํฅ์ ์ค ์ ์๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ ์์ ์ ๊ทธ๋ ๊ฒ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ฅผ ํตํด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ผ์ ์ฒ๋ฆฌํ๋ค.
- ์ค๋ ๊ฑธ๋ฆฌ๋ ์ผ์ Javscript ์์ง์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ API๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ ์์ํ์ฌ ์ฒ๋ฆฌํ๋ค. ์ด ๋ ์ผ์ด ๋๋๋ฉด ์คํํ ์ฝ๋ฐฑ์ ๊ฐ์ด ๋ฑ๋กํ๋ค.
TODO ์ฌ๊ธฐ์ ๋งํ๋ API์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
-
์์๋ ์ผ์ด ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ์ ์ฝ๋ฐฑ์ ์์ ํ(Task Queue)์ ์ถ๊ฐํ๋ค.
-
๋ธ๋ผ์ฐ์ ๋ ํธ์ถ ์คํ์ด ๋น์์ง ๋๋ง๋ค ๊ฐ์ฅ ์ค๋๋ ์์ ์ ๊บผ๋ด์์ ํด๋น ์์ ์ ๋ํ ์ฝ๋ฐฑ์ ์คํ์ํค๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ์ด๋ฅผ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ผ๊ณ ํ๋ค.
-
์์ ํ์ ์์ ์ ์ฒ๋ฆฌํ๋ ์ฌ์ด์ฌ์ด์ ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด์ ์๋ก ๊ทธ๋ฆด ์ ์๋ค. ์ด๋ ํธ์ถ ์คํ์ด ๋น์์ง์ง ์๋๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํ๋ฉด์ ์๋ก ๊ทธ๋ฆด ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
๋ธ๋ผ์ฐ์ ์ JavaScript ์ฝ๋ ์คํ ๊ณผ์ ์ฐธ๊ณ
๋ง์ฝ ํด์ผํ ์ผ์ด ๋ฉ์ดํ ์๋ฝ ๊ตฌ๋งค
, ๋ฐ์ฃฝ
, ์ํฌ๋ฆผ ํํ
์ด๋ ๊ฒ 3๊ฐ์ง ๋ผ๋ฉด,
-
๋๊ธฐ(Synchrosnous=Sync) ํ๋ก๊ทธ๋๋ฐ: ํด์ผํ ์ผ์ ์์ฐจ์ ์ผ๋ก ๋๋ด ๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ํ๊ฐ์ง ํ๋์ด ์๋ฃ๋์ ๋ ๋ค์ ํ๋์ ์งํํ๋ค.
=
์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋๋ค=
์ด๋ค ์ผ์ด ์๋ฃ๋ ๋๊น์ง ์ฝ๋์ ์คํ์ ๋ฉ์ถ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ex)
๋ฉ์ดํ ์๋ผ ๊ตฌ๋งค
->๋ฐ์ฃฝ
->์ํฌ๋ฆผ ํํ
-
๋น๋๊ธฐ(Asynchronous=Async) ํ๋ก๊ทธ๋๋ฐ: ๊ฐ๊ฐ์ ํ๋(ํน์ ์์ฒญ)์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ๋ค๋ฅธ ์ผ์ ์งํํด๋๊ฐ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
=
์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์๋๋ค.=
์ด๋ค ์ผ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ์คํํด๋๊ฐ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ex)
A์๊ฒ
๋ฉ์ดํ ์๋ฝ ๊ตฌ๋งค
๋ช ๋ นB์๊ฒ
๋ฐ์ฃฝ
๋ช ๋ นC์๊ฒ
์ํฌ๋ฆผ ํํ
๋ช ๋ น10๋ถ ๋ค
๋ฉ์ดํ ์๋ฝ ๊ตฌ๋งค
์์ํฌ๋ฆผ ํํ
์ด ์๋ฃ๋๋ค.15๋ถ ๋ค
๋ฐ์ฃฝ
์ด ์๋ฃ๋๋ค.3๊ฐ์ง ์์ ์ ํ๋๋ฐ ์ด 15๋ถ์ด ์์๋๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ๊ณผ ์๋ต์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋๋ค. ํ์ง๋ง ์ฝ๋๊ฐ ์คํ๋๋ ์์๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ์ด ๋๊ณ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋ฎ์์ง๋ค๋ ๋นํ์ ๋ฐ์์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Javascript์์ ์ฌ์ฉ๋๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด ์ด๋ค ๊ฒ์ด ์๋์ง ์ดํด๋ณผ ๊ฒ์ด๋ค.
-
์ฌ์ฉ์์ ์์ฒญ์ ์ํด ํน์ ์๊ฐ์ด ๊ฒฝ๊ณผ๋๊ธฐ ์ ๊น์ง ์ด๋ค ํจ์์ ์คํ์ ๋ณด๋ฅํ๋ ๊ฒฝ์ฐ(setTimeout)
-
์ฌ์ฉ์์ ์ง์ ๊ฐ์ ์ด ์์ ๋ ์ด๋ค ํจ์๋ฅผ ์คํํ๋๋ก ๋๊ธฐํ๋ ๊ฒฝ์ฐ(addEventListner)
-
์น๋ธ๋ผ์ฐ์ ์์ฒด๊ฐ ์๋ ๋ค๋ฅธ ๋์์ ์ด๋ค ์ผ์ ์์ฒญํ๊ณ ๊ทธ์ ๋ํ ์๋ต์ด ์์ ๋ ๋น๋ก์ ์ด๋ค ํจ์๋ฅผ ์คํํ๋๋ก ๋๊ธฐํ๋ ๊ฒฝ์ฐ(XMLHttpRequest)
-
CPU์ ๊ณ์ฐ์ ์ํด ์ฆ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋๋ถ๋ถ์ ์ฝ๋๋ ๋น๋๊ธฐ์ ์ธ ์ฝ๋๊ฐ ์๋ ๋๊ธฐ์ ์ฝ๋์ด๋ค.
์ฝ๋ฐฑ์ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ๋๊ธฐ๋ ํจ์๋ฅผ ์๋ฏธ
-
์ฝ๋ฐฑ์ ์ด์ฉ, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
-
์ฝ๋ฐฑ์ ์ธ์๋ก ๋ฐ๋ ํจ์๊ฐ ํญ์ ๋น๋๊ธฐ์์ผ๋ก ๋์ํ๋ ๊ฒ์ ์๋๋ค.
-
์ฝ๋ฐฑ๋ง์ผ๋ก๋ ๋ณต์กํ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํํํ๊ธฐ๊ฐ ์ด๋ ค์ ์ฝ๋ฐฑ ์ง์ฅ ์ด๋ผ๋ ๋ง์ด ์๊ฒจ๋ฌ์
-
์ฝ๋ฐฑ์ง์ฅ: ์ฝ๋ฐฑํจ์๋ฅผ ์ต๋ช ํจ์๋ก ์ ๋ฌํ๋ ๊ณผ์ ์ด ๋ฐ๋ณต๋์ด ์ฝ๋์ ๋ค์ฌ์ฐ๊ธฐ ์ ๋๊ฐ ๊ฐ๋นํ๊ธฐ ํ๋ค ์ ๋๋ก ๊น์ด์ง๋ ํ์. ์ฝ๋ฐฑ์ง์ฅ ํํ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ฝ๋๋ฅผ ์์ ํ๊ธฐ๋ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
์ฝ๋ฐฑ ์ง์ฅ ํด๊ฒฐ์ ์ํด
Promise, Generator (ES6)
async/await (ES2017)
๋ฑ์ด ๋์ ๋จ
TODO ์ฝ๋ฐฑ ์์ ์ฝ๋ ๋ณด์ถฉ ํ์
์ฝ๋ฐฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Promise ํจํด์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ฑ์ฅํจ
Promise๋ '์ธ์ ๊ฐ ๋๋๋ ์์ '์ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๋ ํต ๊ฐ์ ๊ฐ์ฒด์ด๋ค.
-
then
๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ฝ๋ฐฑ์ ๋ฑ๋กํด์, ์์ ์ด ๋๋ฌ์ ๋ ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง๊ณ ๋ค๋ฅธ ์์ ์ ํ ์ ์๋ค. -
Promise ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์
Promise.resolve
๋ผ๋ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. -
๋น๋๊ธฐ ์์ ์ ํ๋ Promise ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ค๋ฉด
Promise
์์ฑ์๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
-
Promise ์์ฑ์๋ ์ฝ๋ฐฑ์ ์ธ์๋ก ๋ฐ๋๋ค. ์ด ์ฝ๋ฐฑ์ ์ฒซ๋ฒ์งธ ์ธ์๋ก
resolve
ํจ์๊ฐ ๋ค์ด์จ๋ค. ์ฝ๋ฐฑ ์์์resolve
๋ฅผ ํธ์ถํ๋ฉดresolve
์ ์ธ์๋ก ์ค ๊ฐ์ด ๊ณง Promise ๊ฐ์ฒด์ ๊ถ๊ทน์ ์ธ ๊ฒฐ๊ณผ๊ฐ์ด ๋๋ค. (๋๋ฒ์งธ ์ธ์๋ก๋reject
ํจ์๊ฐ ๋ค์ด๊ฐ๋๋ฐ ์ด๋ ๋น๋๊ธฐ ์์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถํ๋ ํจ์๋ค.) -
Promise ๊ฐ์ฒด์ ๊ฒฐ๊ณผ๊ฐ์ ์ด์ฉํด ์ถ๊ฐ ์์ ์ ํ๋ ค๋ฉด
then
๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค.then
๋ฉ์๋์ ์ฝ๋ฐฑ์ ๋๊ฒจ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ค์ด์จ ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง๊ณ ์ถ๊ฐ ์์ ์ ํ ์ ์๋ค.
// ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ - Promise(1)
const p = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('2์ด๊ฐ ์ง๋ฌ์ต๋๋ค.');
resolve('hello');
}, 2000);
}); // 2์ด ๋ค ์ฝ๋ฐฑ์ด ์คํ๋๊ณ resolve ํจ์๊ฐ ํธ์ถ๋์ด p๋ณ์์ ์ ์ฅ๋ Promise ๊ฐ์ฒด๋ ๊ฒฐ๊ณผ๊ฐ 'hello'์ ๊ฐ๋ ๊ฐ์ฒด๊ฐ ๋๋ค.
// then ๋ฉ์๋๋ Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
const p2 = p.then((msg) => {
// then ๋ฉ์๋์ ์ฝ๋ฐฑ์ ๋๊ฒจ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ค์ด์จ (Promise ๊ฐ์ฒด)๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง๊ณ ์ถ๊ฐ ์์
์ ํ ์ ์๋ค.
return msg + ' world'; // msg๋ p์ ๋ด๊ธด Promise ๊ฐ์ฒด ๊ฒฐ๊ณผ๊ฐ์ด์๋ 'hello'
});
p2.then((msg) => {
// then ๋ฉ์๋์ ์ฝ๋ฐฑ์ ๋๊ฒจ์ (Promise ๊ฐ์ฒด๋ฅผ ๋ฐํ๋ฐ์ ๊ฐ์ง๊ณ ์๋)p2 ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง๊ณ ๋ ์ถ๊ฐ ์์
!
console.log(msg); // hello world
});
// ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ - Promise(2)
// Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์
function delay(ms) {
return new Promise((resolve) => {
setTimeout(() => {
console.log('${ms} ๋ฐ๋ฆฌ์ด๊ฐ ์ง๋ฌ์ต๋๋ค.'); // ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ๋ฐํ์ ์์ ์ ์ด๋ฏธ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ/๋ณํ ๋์ ๊ฒฐ๊ณผ์ ${ms} ๊ทธ๋๋ก ํ์๋๋ ๊ฑด๊ฐ?(TODO)
console.log(ms);
resolve();
}, ms);
});
}
// delay()๋ Promise ํต์ ๋ฐํํ๋ ํจ์์ด๋ค.
// ms ์๊ฐ์ด ์ง๋ ํ ํจ์ ๋ด๋ถ๋ฅผ ์คํํ๋ค.
// resolve();๋ฅผ ํตํด Promise ํต์ด ๋ฐํ๋๋ค.
delay(1000)
.then(() => delay(2000))
.then(() => Promise.resolve('๋'))
.then((msg) => {
console.log(msg);
});
// ๋งจ ์๋ then์
// .then(console.log); ๋ก ์ค์ฌ์ธ ์ ์์
console.log('์์');
์ ์ฝ๋ ์คํ ๊ฒฐ๊ณผ
์์
${ms} ๋ฐ๋ฆฌ์ด๊ฐ ์ง๋ฌ์ต๋๋ค.
1000
${ms} ๋ฐ๋ฆฌ์ด๊ฐ ์ง๋ฌ์ต๋๋ค.
2000
๋
์ฝ๋ ์ค๋ช
1์ด ์๋ค๊ฐ delay() ํจ์๊ฐ ์คํ๋๋ค.
์ 1์ด๊ฐ ๊ฐ๊ธฐ ์ ์ console.log('์์')
์ฝ๋๊ฐ ์คํ๋๋ค.
resolve ํจ์๋ฅผ ํธ์ถํด Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๋ฐํ๋ Promise ๊ฐ์ฒด๋ฅผ ์ด์ฉ, then ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ delay(2000)์ ์ฝ๋ฐฑ์ผ๋ก ๋๊ฒจ์ค๋ค. 2์ด ๊ธฐ๋ค๋ ธ๋ค๊ฐ delay() ํจ์ ๋ด๋ถ ์ฝ๋๋ฅผ ์คํํ๋ค.
๋ฐํ๋ Promise ๊ฐ์ฒด๋ฅผ ์ด์ฉ, then ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ด๋ฒ์ resolve๋ฅผ ์ง์ ํธ์ถํ์ฌ '๋'์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ง Promise ๊ฐ์ฒด๋ฅผ ๋ฐํ๋ฐ๋๋ค.
์ Promise ๊ฐ์ฒด๋ฅผ ์ด์ฉ, then ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ค.
axios
๋ Javascript๋ฅผ ํตํด ์ง์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
axios.get()
-> GET ๋ฉ์๋๋ก ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ -> Promise ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ
// HTTP ํต์ ์ ํ ๋ Promise์ ์ฌ์ฉ
const axios = require('axios');
const API_URL = 'https://api.github.com';
axios
.get(`${API_URL}/repos/facebookincubator/create-react-app/issues?per_page=5`) // ํด๋น ์ฃผ์์ get์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ ๋ฐ์ดํฐ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ด๊ธด Promise ํต์ด ๋ฐํ๋๋ค. ๊ฒฐ๊ณผ๊ฐ์ Response ๊ฐ์ฒด์ด๋ค.(HTTP ์๋ต์ ๋ํ ๋ด์ฉ)
.then((res) => {
// ๋ฐ์ ๋ฐ์ดํฐ๊ฐ res์ ๋ด๊ธด๋ค
res.data
.map((issue) => issue.title)
.forEach((title, index) => console.log(index + 1 + ' : ' + title));
});
-
then
๋ฉ์๋๋ Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ฏ๋ก, ์ฝ๋ฐฑ์ ์ค์ฒฉํ์ง ์๊ณ ๋ ๋น๋๊ธฐ ์์ ์ ์ฐ๋ฌ์ ํ ์ ์๋ค. -
๋น๋๊ธฐ ์์ ์ ๊ฐ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋๋ค.
TODO
Promise.all ๋ฉ์๋ -> Iterator, Iterableํ ๊ฐ์ฒด์ ๋ฐ๋ณต ์ฒ๋ฆฌ ๊ฐ๋ฅ
Promise.race
Promise ์ํ(3๊ฐ์ง) - pending, settled(fulfilled, rejected)
Promise ์์ธ ์ฒ๋ฆฌ(reject ๊ด๋ จ)
ํ๋ก ํธ์๋ ๋ฉด์ ์๋ฃ, Asynchronous
ES6 ํ๋ก๋ฏธ์ค(Promise), ์ง์ง ์ฝ๊ฒ ์ดํดํ๊ธฐ (Promise์ ๋ชฉ์ ๋ง ์๊ฐํ๋ค.)
[JavaScript] ES6 ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ๋ํด ์์๋ณด์!!
JavaScript ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ promise ์ดํดํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ Promise ์ฝ๊ฒ ์ดํดํ๊ธฐ
๋์, ์ฝ์ด์๋ฐ์คํฌ๋ฆฝํธ
- ์๋ฐ์คํฌ๋ฆฝํธ Promise ์ฝ๊ฒ ์ดํดํ๊ธฐ https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
ํ์๋ค ๊ฒฐ๊ณผ๋ฌผ ๋ฐ ์ง์์๋ต&์ฝ๋๋ฆฌ๋ทฐ
https://github.com/pul8219/TIL/blob/master/Documents/FrontEnd-Study/step7.md
[์ง๋ฌธ-์์]
๋ฉ์ดํ ์๋ฝ ๊ตฌ๋งค, ๋ฐ์ฃฝ, ์ํฌ๋ฆผ ํํ ์ ๋ํ ์์ ๊ฐ ์ธ์ ๊น์ด์
๋น๋๊ธฐ์ ์ธ ์ฝ๋์ ์
์ฌ์ฉ์์ ์์ฒญ์ ์ํด ํน์ ์๊ฐ์ด ๊ฒฝ๊ณผ๋๊ธฐ ์ ๊น์ง ์ด๋ค ํจ์์ ์คํ์ ๋ณด๋ฅํ๋ ๊ฒฝ์ฐ(setTimeout)
์ฌ์ฉ์์ ์ง์ ๊ฐ์
์ด ์์ ๋ ์ด๋ค ํจ์๋ฅผ ์คํํ๋๋ก ๋๊ธฐํ๋ ๊ฒฝ์ฐ(addEventListner)
์น๋ธ๋ผ์ฐ์ ์์ฒด๊ฐ ์๋ ๋ค๋ฅธ ๋์์ ์ด๋ค ์ผ์ ์์ฒญํ๊ณ ๊ทธ์ ๋ํ ์๋ต์ด ์์ ๋ ๋น๋ก์ ์ด๋ค ํจ์๋ฅผ ์คํํ๋๋ก ๋๊ธฐํ๋ ๊ฒฝ์ฐ(XMLHttpRequest)
CPU์ ๊ณ์ฐ์ ์ํด ์ฆ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋๋ถ๋ถ์ ์ฝ๋๋ ๋น๋๊ธฐ์ ์ธ ์ฝ๋๊ฐ ์๋ ๋๊ธฐ์ ์ฝ๋์ด๋ค.
console.log('${ms} ๋ฐ๋ฆฌ์ด๊ฐ ์ง๋ฌ์ต๋๋ค.'); // ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ๋ฐํ์ ์์ ์ ์ด๋ฏธ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ/๋ณํ ๋์ ๊ฒฐ๊ณผ์ ${ms} ๊ทธ๋๋ก ํ์๋๋ ๊ฑด๊ฐ?(TODO)
์ด๋ฐ ์๋ฌธ์ ์ ๊ฐ์ ธ๋ณด๋ ์ต๊ด์ด ์ข์๊ฒ ๊ฐ์ต๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ํฌํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ธ ๋๋ `` backtick ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์์ ์์๋ '' ๊ฐ ์ฌ์ฉ๋์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ ${ms} ๊ทธ๋๋ก ์ถ๋ ฅ์ด ๋์๋ค์
[๋ต๋ณ]
@eyabc
ํ. ` (backtick) ์๊ณ ๋ง์์ด์๊ตฐ์! ์ง๊ธ๊น์ง ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ์ธ ๋๋ง๋ค ์ ์๋์ง ์ ์๋์ง ํ๊ณ ์์์ต๋๋ค (ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ) ์์๋ ๋์ JS ์ด๋ณด๋ ๋ง์ ๊ฑธ ์์๊ฐ๋๋ค... ๐ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด๊ณผ ๋ฐํ์ ์์ ์ ๊ด๋ จํด์๋ ๋ ์์๋ณด๊ณ Javascript ๋ด๋ถ ๋์ ๋ฐฉ์ ๊ณผ ๊ฐ์ด ์ ๋ฆฌํด์ผ๊ฒ ์ต๋๋ค ๋ฆฌ๋ทฐ ๊ฐ์ฌํฉ๋๋ค!
[์ง๋ฌธ]
๋ธ๋ผ์ฐ์ ๊ฐ JavaScript ์ฝ๋๋ฅผ ์คํํ ๋, ํธ์ถ ์คํ์ ๋ณํ
1.์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ ํ ๋
- ์ ์ญ์คํ๋งฅ๋ฝ(Global Execution Context) ์ ํธ์ถ ์คํ์ push
2.ํจ์๊ฐ ํธ์ถ ๋ ๋
- ํจ์ ํธ์ถ์ ์คํ ๋งฅ๋ฝ ์์ฑ
- ํจ์ ํธ์ถ์ ์คํ ๋งฅ๋ฝ์ ํธ์ถ ์คํ์ push
3.ํจ์์ ์คํ์ด ๋๋ ๋
- ๊ฒฐ๊ณผ๊ฐ ๋ฐํ
- ํธ์ถ ์คํ์ ๊ฐ์ฅ ์์ ์๋ ์คํ ๋งฅ๋ฝ pop
4.์คํฌ๋ฆฝํธ์ ์คํ์ด ๋ชจ๋ ๋๋ ๋
- ์ ์ญ ์คํ ๋งฅ๋ฝ์ ํธ์ถ ์คํ์์ pop
์น ๋ธ๋ผ์ฐ์ ๋ ํธ์ถ ์คํ์ ์คํ ๋งฅ๋ฝ์ด ์กด์ฌํ๋ ๋์(์คํ ์ค์ธ ํจ์๊ฐ ์กด์ฌํ๋ ๋์) ๋จนํต์ด ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ฌ์จ, ๋ณดํต 60fps, ๋๋ต 16 ms ์์ ์ฝ๋ ์คํ์ ์๋ฃ๋์ง ์์ผ๋ฉด
- ๋ธ๋ผ์ฐ์ ๋ด ์ ๋๋งค์ด์
์ด ๋๋ ๋๊ธฐ๋ ํ์
- ์ฌ์ฉ์ ๊ฒฝํ์ ์
์ํฅ
์ ๋ด์ฉ์ด ์์ธํ๊ฒ ์์ ๋์ด์์ด ์ข์ต๋๋ค. ์ ๋ ํธ์ถ์คํ๊ณผ ์์ ํ๊ฐ ๋ณํํ๋ ๊ฒ์๋ง ์ด์ ์ ๋ง์ถ์ด ์ผ๋๋ฐ ์ ์ญ ์คํ ๋งฅ๋ฝ๊น์ง ๊ณ ๋ คํด Javascript ์ ์ฒด ๋์ ๋ฐฉ์๊ณผ ์ฐ๊ฒฐ์ง์ด ์ ๋ฆฌํ๋๊ฒ ๋ ํ์ํ ๊ฒ ๊ฐ๋ค์. ์์๋ ๊ธ ์ฐธ๊ณ ํด์ ์ ๊ฒ๋ ๋ณด์ํ๊ฒ ์ต๋๋ค.
Motivation - ํ์ด๋จธ API ๋ด์ฉ ์ค) ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋
์ด ์๋ ๋ธ๋ผ์ฐ์ ์ node.js ์์ ๋ถํฐ ์๋ค.
๋ชฐ๋๋ ๋ด์ฉ์
๋๋ค ..!
Promise ๋ด์ฉ ์ค ์๋ ์ฝ๋์์ hello๊ฐ ์ด๋ป๊ฒ ์ถ๋ ฅ๋๋ ๊ฑด๊ฐ์? 'hello'๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ด์ ๊ฐ์ฒด ๋ฐํ์ด ์๋ ๊ฒ ๊ฐ์๋ฐ ์ ์ดํด๊ฐ ์๋์ ์ง๋ฌธ๋๋ฆฝ๋๋ค!
let promise = new Promise(resolve => {
setTimeout(() => resolve("done!"), 1000);
});
promise.then(alert); // 1์ด ๋ค "done!" ์ถ๋ ฅ
promise.then(msg => {
console.log(msg); // hello
});
[๋ต๋ณ]
@pul8219 ์๋ฃ๋ค์ ๋ณต๋ถ ํ๋ค๋ณด๋ ์ค์๊ฐ ์๊ฒผ๋ค์ ใ ใ ๊ฐ์ฌํฉ๋๋ค!
https://jeongshin.github.io/JeongShin_Blog/TIL/study/NodeJS.html
https://github.com/quavious/hell_script/blob/master/chapter7.js
[์ง๋ฌธ]
์์๊ฐ๋๋ค!
- this๋ฅผ ํตํด ํ์ด๋จธ ๋๋ด๊ธฐ
//setInterval์ ์ฝ๋ฐฑ ํจ์๋ก function(){...}์ ๋ฃ์ด์ฃผ๋ฉด ํด๋น function์ setInterval ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ๋๋ค.
//์ฆ, ์ฝ๋ฐฑํจ์ ๋ด ์์ฑ๋ this๋ ์คํ๊ฐ์ฒด, setInterval ํจ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ , this๋ฅผ ํตํด ๋ณ๋ค๋ฅธ ๋ณ์ ์ ์ธ ์์ด๋
//ํจ์๋ฅผ ๋๋ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
let i = 0;
setInterval(function () {
i++;
console.log(i);
if (i === 5) {
clearInterval(this);
}
}, 2000);
//5๊น์ง ์ฝ์์ ์ถ๋ ฅ๋๊ณ ์ข
๋ฃ๋๋ค.
- async, await์ ์ดํด
async function fetchAPI() {
const resp = await Axios.get('https://example.com');
console.log(resp.status);
// example.com์ http ์์ฒญ ๋ฐ ๊ฐ ๋ฐํ์ด ์๋ฃ๋ ๋๊น์ง console.log๊ฐ ๋์ํ์ง ์๋๋ค.
}
function withAsyncFunc() {
fetchAPI();
console.log(1000);
}
//withAsyncFunc()
// 1000์ด ๋จผ์ ์ถ๋ ฅ๋๊ณ ๊ทธ ๋ค์ fetchAPI, ๋น๋๊ธฐ์ ๋ฉ์๋์ ์๋ console.log(resp.status)๊ฐ ์คํ๋๋ค.
// async ํจ์ ๋ด์์ await์ ์กด์ฌ ๋๋ถ์ Get ์์ฒญ์ด ์๋ฃ๋ ์งํ resp.status๊ฐ ์ถ๋ ฅ๋๋ค.
// async await์ผ๋ก ๋น๋๊ธฐ์ ์ฝ๋๋ฅผ ๋๊ธฐ์์ผ๋ก ์์ฑํ ์ ์๋ค.
async function withAsyncFunc() {
await fetchAPI();
console.log(1000);
}
withAsyncFunc();
// fetchAPI ํจ์์ await์ ๋ถ์ฌ์ค์ผ๋ก์จ resp.status๊ฐ ์ฝ์์ ์ถ๋ ฅ๋ ํ 1000์ด ์ถ๋ ฅ๋๊ฒ ํ์๋ค.
์๋ ๋ด์ฉ๊ณผ ํจ๊ป ํธ์ถ์คํ, ์์ ํ ์ ๋ณํ ๋ฑ๊ณผ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ JavaScript ์ฝ๋๋ฅผ ์คํ์ํฌ ๋ ์ผ์ด๋๋ ๊ณผ์ ์ ๋ํ ์ค๋ช ์ด ํจ๊ป ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
function func() {
console.log(1);
setTimeout(function () {
console.log(2);
}, 0);
console.log(3);
}
//func() // func ํจ์๋ 1, 2, 3์ ์ถ๋ ฅํ์ง ์๋๋ค. setTimeout์ ์ ๋ฌ๋ ์ธ์๊ฐ 0์ด๋ผ๋ ํด๋น ๋ฉ์๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์
// ์ฝ์์๋ 1, 3, 2๊ฐ ์ถ๋ ฅ๋๋ค
https://github.com/khw970421/js-interview/blob/master/const/project7.js https://github.com/khw970421/js-interview/blob/master/const/project7.5.js https://github.com/khw970421/js-interview/blob/master/const/project7_total.js
[์ง๋ฌธ]
๊ธฐ๋ณธ์ ์ผ๋ก ์์์ผ ํ ๊ฒ
๋ถ๋ถ์ด ๋์์ด ๋ง์ด ๋์์ต๋๋ค!
//๊ธฐ๋ณธ์ ์ผ๋ก ์์์ผ ํ ๊ฒ
const ex = function () {};
console.log(function () {}); //[Function (anonymous)] => ํจ์์ ์ฐธ์กฐ ๊ฐ์ ๋ฐํํ๋ค. (ํจ์์ ์คํ์์ด ํจ์์์ฒด๋ฅผ ๋ฆฌํด)
console.log(() => {}); //[Function (anonymous)] => ํจ์์ ์ฐธ์กฐ ๊ฐ์ ๋ฐํํ๋ค. (ํจ์์ ์คํ์์ด ํจ์์์ฒด๋ฅผ ๋ฆฌํด)
console.log(ex); //[Function: ex] => ํจ์์ ์ฐธ์กฐ ๊ฐ์ ๋ฐํํ๋ค. (ํจ์์ ์คํ์์ด ํจ์์์ฒด๋ฅผ ๋ฆฌํด)
console.log(ex()); //undefined => ๋ฐํ๋ฌธ์ด ์์ด์ undefined์ด๋ค.(ํจ์์ ์คํ ํ ๋ฐํ๊ฐ์ ๋ฆฌํด)
//์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ํน์ ์ฝ๋์ ์ฐ์ฐ์ด ๋๋ ๋๊น์ง ์ฝ๋์ ์คํ์ ๋ฉ์ถ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋จผ์ ์คํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ์๋ฏธํ๋ค.
//setTimeout ์์
const later_hi = () => {
console.log('1์ด๋ค ใ
ใ
');
};
setTimeout(later_hi, 1000); //'1์ด๋ค ใ
ใ
'
//setTimeout(later_hi(),1000); // error =>later_hi()์ ๋ฐํ๊ฐ์ด undefiend์ด๋ฏ๋ก ์ค์ผ์ค๋ง ๋์์ ์ฐพ์ง๋ชปํจ
๋ด๊ฐ setTimeout()
๋ฑ์ ํ์ด๋จธ๋ ์ฝ๋ฐฑ์ ๋น๋๊ธฐ์ ์งํ์ ๊ณต๋ถ ๋ ํด์ผ๋ ๋ฏ!
์ ๊ฐ ์ดํดํ ๊ฒ์ด ๋ง๋์ง ๊ถ๊ธํ์ฌ ๋๋ฆฌ๋ ์ง๋ฌธ์ ๋๋ค
// setTimeout
class ash1 {
hp = 15;
}
const a1 = new ash1();
const di1 = setTimeout(dinomit1, 1000);
function dinomit1() {
console.log('clearTimeout ์ผ๋ก ์ธํด ์ถ๋ ฅ x');
}
clearTimeout(di1); //di1์ ๋ฐํ๊ฐ์ด ๋ค์ด๊ฐ์๋ค๊ฐ clearTimeout์ผ๋ก 8๋ฐํ๊ฐ์ด ์ ๋ฌ๋์ด ํ์ด๋จธ ์ทจ์
ํน์ ์ ์์ ์์ console.log('clearTimeout ์ผ๋ก ์ธํด ์ถ๋ ฅ x');
๊ฐ ์ถ๋ ฅ๋์ง ์๋ ์ด์ ๊ฐ
dinomit1()
ํจ์๋ฅผ 1์ด ๋ค์ ์คํํ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ด์ clearTimeout(di1);
๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ธ๊ฐ์?
๊ทธ๋ฆฌ๊ณ ํ์ด๋จธ ์๋ณ์๊ฐ di1
์ ๋ฐํ๋๋ ์๊ธฐ๊ฐ const di1 = setTimeout(dinomit1, 1000);
์ด ์ฝ๋๊ฐ ์คํ๋ ๋ ์ธ์ง ๊ถ๊ธํฉ๋๋ค!
[๋ต๋ณ]
pul8219๋ ๋์์ด๋์ด์ ๋คํ์ ๋๋ค. ์ผ๋จ ์ฒซ๋ฒ์จฐ ์ง๋ฌธ์ ๋ํ ๋ต์ผ๋ก๋ ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ฝ clearTimeout(di1)์ dinomit()ํจ์์์ ๋ฃ๋๋ค๋ฉด
class ash1 {
hp = 15;
}
const a1 = new ash1();
const di1 = setTimeout(dinomit1, 1000);
function dinomit1() {
clearTimeout(di1); //di1์ ๋ฐํ๊ฐ์ด ๋ค์ด๊ฐ์๋ค๊ฐ clearTimeout์ผ๋ก 8๋ฐํ๊ฐ์ด ์ ๋ฌ๋์ด ํ์ด๋จธ ์ทจ์
console.log('clearTimeout ์ผ๋ก ์ธํด ์ถ๋ ฅ x');
}
๊ฒฐ๊ณผ๋ clearTimeout ์ผ๋ก ์ธํด ์ถ๋ ฅ x ์ด๋ ๊ฒ ์ถ๋ ฅ์ด ๋ฉ๋๋ค. ๊ฒฐ๊ตญ 1์ด๋ค์ ์คํํ๊ธฐ ์ ์ clearTimeout์ด ์คํ๋๊ธฐ๋๋ฌธ์ด๋ผ๊ณ ๋ด์ผํ ๊ฒ๊ฐ์ต๋๋ค.
๋๋ฒ์งธ ์ง๋ฌธ์ ์ ๋ ํฅ๋ฏธ๋ก์์
// setTimeout
class ash1 {
hp = 15;
}
const a1 = new ash1();
const di1 = setTimeout(dinomit1, 1000);
function dinomit1() {
console.log('clearTimeout ์ผ๋ก ์ธํด ์ถ๋ ฅ x');
}
console.log(di1);
clearTimeout(di1); //di1์ ๋ฐํ๊ฐ์ด ๋ค์ด๊ฐ์๋ค๊ฐ clearTimeout์ผ๋ก 8๋ฐํ๊ฐ์ด ์ ๋ฌ๋์ด ํ์ด๋จธ ์ทจ์
console.log(di1);
์ด๋ฐ์์ผ๋ก di1์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฒ ๋ณด๊ณ clearTimeout ํ์ di1์ ๊ฒฐ๊ณผ๋ฅผ ๋ณธ ๊ฒฐ๊ณผ
_idleTimeout: 1000,
_idlePrev: [TimersList],
_idleNext: [TimersList],
_idleStart: 162,
_onTimeout: [Function: dinomit1],
_timerArgs: undefined,
_repeat: null,
_destroyed: false,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
Timeout {
_idleTimeout: -1,
_idlePrev: null,
_idleNext: null,
_idleStart: 162,
_onTimeout: null,
_timerArgs: undefined,
_repeat: null,
_destroyed: true,
[Symbol(refed)]: true,
[Symbol(asyncId)]: 2,
[Symbol(triggerId)]: 1
}
Process finished with exit code 0
์ด๋ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์์์ต๋๋ค. ์ฌ๊ธฐ์ ์ผ๋จ ์ค์ํ๊ฑด ์ฒซ๋ฒ์งธ์ idleTimeout์ด 1000์์ -1์ด ๋๊ฒ์ ๋ณด๋ฉฐ clearTimeout์ผ๋ก ์ธํด ์ด๋ ๊ฒ ๋ฐ๋๊ฒ์ ์์์์ต๋๋ค. ์ฆ "di1์ ๋ฐํ๋๋ ์๊ธฐ๊ฐ const di1 = setTimeout(dinomit1, 1000); ์ด ์ฝ๋๊ฐ ์คํ๋ ๋ ์ธ์ง " ์ ๋ํ ๋ต์ ์ด ์ฝ๋๊ฐ ์คํ๋์์๋ di1์ ์ ๋ฐ ๋ด์ฉ์ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ฏ๋ก di1์ ๋ฐํํ๋ค๋ผ๋ ๋ด์ฉ์ด di1์ ๊ฐ์ด ์ ์ฅ๋๋ค? ๋ผ๋ ์๋ฏธ๋ผ๋ฉด ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ( ํน์ ์ ๊ฐํ ์ค๋ช ์ด ์ด๋ ค์ฐ์๋ฉด ํ๋ฒ ์ ๊ฐ ์ธ๊ธํ ์ฝ๋๋ฅผ ์คํํด๋ณด๋ฉด์ ์ดํดํ๋๊ฒ๋ ์ถ๊ฐ์ ์ผ๋ก ๊ด์ฐฎ์๊ฒ ๊ฐ์ต๋๋ค.)
//์ด๋ ๊ฒ๋ ๋น๋๊ธฐ(hํจ์๊ฐ ๋๋๊ธฐ์ ์ ๋ด๋ถํจ์๋ค์ด ์ฒ๋ฆฌ)์ด์ง๋ง ๊ฒฐ๊ณผ ์ถ๋ ฅ์ a,b๊ฐ ์์ฐจ์ ์ผ๋ก ๋์จ๋ค.
function h(callback) {
let a = 100,
b = 150;
callback(a);
callback(b);
}
h(function (value) {
console.log(value);
});
callback(a);
callback(b);
๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋?
function test(callback) {
console.log('์ฝ๋ฐฑํจ์์');
callback();
}
test(function () {
console.log('์ด๋ถ๋ถ์ด ์ฝ๋ฐฑ');
});
๊ฒฐ๊ณผ ์์ธกํด๋ณด๊ธฐ!