Callback ์ง€์˜ฅ์„ ์œ ๋ฐœํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฐฉ์‹๋ณด๋‹ค ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋™๊ธฐ๋ฐฉ์‹์ฒ˜๋Ÿผ ์ง๊ด€์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


Async & await๋ž€?

  • Async๋ฅผ ํ•จ์ˆ˜(Function) ์•ž์— ๋ถ™์ด๋ฉด ํ•ญ์ƒ promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    (ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋”๋ผ๋„ ์ดํ–‰ ์ƒํƒœ์˜ ํ”„๋ผ๋ฏธ์Šค(resolved promise)๋กœ ๊ฐ’์„ ๊ฐ์‹ธ ์ดํ–‰๋œ ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ํ•จ)

  • Async๋Š” ํ‰๋ฒ”ํ•œ ํ•จ์ˆ˜๋ฅผ ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋น„๋™๊ธฐ์ ์ธ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ๊ณ 

  • Async ํ•จ์ˆ˜ ์•ˆ์—์„œ await๋Š” ์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์ž์‹ ์˜ ์ฐจ๋ก€๊ฐ€ ์˜ฌ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ž์‹ ์˜ ์ฐจ๋ก€๊ฐ€ ์˜ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

async function test() {
  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve('์™„๋ฃŒ!'), 3000);
  });

  let result = await promise; // ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์ดํ–‰๋  ๋•Œ๊นŒ์ง€ ์น˜๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆผ (*)

  alert(result); // "์™„๋ฃŒ!"
}

test();

Async & await ์ด์ „์— Promise๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ

  • promise๋Š” ์ ‘๊ทผํ• ๋•Œ .then()์„ ์‚ฌ์šฉํ•˜๊ณ  error์ฒ˜๋ฆฌ๋Š” .catch()๋กœ ํ•œ๋‹ค.
  • ๋‹จ์–ด์˜ ์˜๋ฏธ ์•ฝ์† โ€˜๋ฏธ๋ž˜โ€™ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๊ธด ํ•˜์ง€๋งŒ โ€˜promiseโ€™๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด, ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฏธ๋ž˜์‹œ์ ์— ์žˆ๋Š”์ง€?, ์ด๋ฏธ ๋ฐ›์•˜๋Š”์ง€? ์— ๋Œ€ํ•ด์„œ๋Š” ์ƒ๊ด€์—†๋‹ค.
  • ํ”„๋กœ๋ฏธ์Šค๋Š” ์ผ๊ด€๋œ ๋น„๋™๊ธฐ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค.

Promise์™€ Async & await ์ฐจ์ด

  • ํ”„๋กœ๋ฏธ์Šค .then()๊ณผ await๋Š” ์“ฐ๋Š” ๋ฐฉ๋ฒ•์ด ๊ฑฐ์˜ ๋˜‘๊ฐ™๋‹ค. ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์€ ๋‹ค๋ฅด๋‹ค.

์•Œ์•„๋ณผ๊ฒƒ

  • ์ด์ „์— ๋‚˜์˜จ๊ฒƒ์ด์ง€๋งŒ ์ตœ๊ทผ์— async๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ await๋งŒ์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ธ€์„ ๋ณด์•˜๋Š”๋ฐ, ์ฐพ์•„๋ด์•„๊ฒ ๋‹ค.

์ฐธ๊ณ ๋งํฌ

async await๋ž€?

Async-await๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฐ€

[๋ฒˆ์—ญ] async/await ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— promise๋ฅผ ์ดํ•ดํ•˜๊ธฐ