๐Ÿค” ์˜ˆ์‹œ๋กœ ๋ณด๋Š” ๋น„๋™๊ธฐ

lim1313ยท2021๋…„ 9์›” 5์ผ
0

TILPLUS

๋ชฉ๋ก ๋ณด๊ธฐ
14/40

promise, async await์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ดํ•ดํ•˜๊ณ ์ž ์ž‘์„ฑํ•˜์˜€๋‹ค.

1. async await

async function start(n) {
  console.log('hi');

  const prom = new Promise((resolve) => {
    console.log(n);
    resolve('prom');
  });

  const prom2 = new Promise((resolve) => {
    console.log(n);
    resolve('prom2');
  });

  let a = await prom;
  let b = await prom2;

  console.log('end');

  return a + b;
}

start(1).then(console.log);

console.log('after');

์ตœ์ข… ๊ฒฐ๊ณผ

hi
1
after
1
end
promprom2

ํ•˜์ง€๋งŒ, ์ฒ˜์Œ ๋‚˜์˜ ์˜ˆ์ƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

hi
1
1
end
after
promprom2

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ console.log('after')์ด ์‹คํ–‰๋˜๊ธฐ ์ „, startํ•จ์ˆ˜์— ๋‚จ์•„์žˆ๋Š” ์‹คํ–‰์„ ๋งˆ์ € ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ๊ณ , async์˜ console.log('end')๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•˜์˜€๋‹ค.

ํ•˜์ง€๋งŒ, await๋ฅผ ๋งŒ๋‚˜๋Š” ์ˆœ๊ฐ„ startํ•จ์ˆ˜๋Š” ๋ฉˆ์ท„๋‹ค.

๋‚ด๊ฐ€ ๋†“์น˜๊ณ  ์žˆ์—ˆ๋˜ ๋ถ€๋ถ„์€ ๋ญ˜๊นŒ??


๋‚ด๊ฐ€ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์„ ์‹œ์›ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ๋†“์€ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

๋น„๋™๊ธฐ ์‹คํ–‰ ํ๋ฆ„ ์ดํ•ดํ•˜๊ธฐ (async/await)
๋น„๋™๊ธฐ ์‹คํ–‰ async/await ์„ค๋ช… ์›๋ณธ(์˜์–ด)

์ •๋ฆฌ๋ฅผ ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‹คํ–‰

  1. start(1) ํ˜ธ์ถœ

  2. console.log('hi') ์‹คํ–‰, ์ถœ๋ ฅ //-> hi ์ถœ๋ ฅ

  3. prom() ํ˜ธ์ถœ

  4. console.log(n) ์‹คํ–‰, ์ถœ๋ ฅ //-> 1 ์ถœ๋ ฅ

  5. Prom() Promise ๋ฆฌํ„ด

  6. await๋ฅผ ๋งŒ๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์—, start(1)์€ ์ผ์‹œ์ค‘๋‹จ๋˜๊ณ , MicroTake Queue๋กœ ์ด๋™์‹œํ‚ด.

  7. asyncํ•จ์ˆ˜์—์„œ ๋‚˜์™€์„œ, asyncํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋กœ ๋Œ์•„๊ฐ€์„œ ๋งˆ์ € ์‹คํ–‰. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” ์ „์—ญ ์ปจํ…์ŠคํŠธ๋กœ ๋Œ์•„๊ฐ.

  8. console.log('after') ์‹คํ–‰, ์ถœ๋ ฅ //-> after ์ถœ๋ ฅ

  9. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— task๊ฐ€ ๋” ์ด์ƒ ์—†๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฃจํ”„๊ฐ€ MicroTask Queue๋ฅผ ํ™•์ธ

  10. async ํ•จ์ˆ˜์ธ startํ•จ์ˆ˜๊ฐ€ ์ฝœ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ณ , ์ด์ „์— ์ค‘๋‹จ๋œ ๊ณณ์—์„œ ์ด์–ด์„œ ์‹คํ–‰

  11. ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณต

  12. start์˜ Promise ๋ฆฌํ„ด๊ฐ’์„ ๋ฐ›์•„ then์‹คํ–‰


์•Œ๊ฒŒ๋œ ๋ถ€๋ถ„

์ด๋ฒˆ ์˜ˆ์‹œ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค์€ await๋ฅผ ๋งŒ๋‚˜๋ฉด asyncํ•จ์ˆ˜๋Š” ์ค‘๋‹จ๋˜๊ณ  MicroTask Queue๋กœ ์ด๋™์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

MicroTask Queue๋กœ ์ด๋™ํ•œ ํ›„์— call stack์ด ๋น„๋ฉด, MicroTask queue๋Š” ํ•˜๋‚˜์”ฉ call stack์œผ๋กœ ์ด๋™์‹œ์ผœ ๋‹ค์‹œ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๋•Œ๋ฌธ์— ๋‚˜์˜ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ค๋ฅธ ๊ฐ’์ด ์ถœ๋ ฅ๋œ ๊ฒƒ์ด์—ˆ๋‹ค.


์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋Š” ๋น„๋™๊ธฐ, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ์ •๋ง ์ •๋ง ์ •๋ง ์ข‹์€ ์ž๋ฃŒ์ด๋‹ค!

๋น„๋™๊ธฐ ์‹คํ–‰ async/await ์„ค๋ช… ์›๋ณธ(์˜์–ด)

profile
start coding

0๊ฐœ์˜ ๋Œ“๊ธ€