๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/Javascript & NodeJS

[Javascript] Async ํ•จ์ˆ˜์™€ Await

by vodkassi 2021. 5. 27.
728x90

โœจ Async ํ•จ์ˆ˜๋ž€?

Promise ๋ฅผ ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•จ์ˆ˜ ์„ ์–ธ ์•ž์— async ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ Promise ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋˜ํ•œ, return ๊ฐ’์ด Promise ๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ Resolved Promise ๋กœ ํ•ด๋‹น ๊ฐ’์„ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

async function Callback(){
    // some code here 
}

 

โœจ Await ์ด๋ž€?

Async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ‚ค์›Œ๋“œ์ด๋‹ค. Promise ๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค.

ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ์— ์—”์ง„์ด ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("์™„๋ฃŒ!"), 1000)
  });

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

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

 

Test:

f()
console.log('first')

// ------- console -------- //
// 'first'
// undefined
// alert '์™„๋ฃŒ'

 

 

Promise ์˜ ๋ณธ์งˆ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ web api ์˜์—ญ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  queue ์— ๊ฒฐ๊ณผ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Async ์™€ Await ์˜ ๋ณธ์งˆ์€ ์ด๋Ÿฌํ•œ promise ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฐธ๊ณ  ์ž๋ฃŒ

async์™€ await

๋Œ“๊ธ€