[js] async & await

์Šˆ๋น„๋‹ˆยท2023๋…„ 7์›” 11์ผ
0

javascript

๋ชฉ๋ก ๋ณด๊ธฐ
7/7

๐Ÿ“Œ async & await๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์œผ๋กœ, ๊ธฐ์กด์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜์™€ ํ”„๋กœ๋ฏธ์Šค์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋™๊ธฐ ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” async & await์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค!



โœ๏ธ async ํ•จ์ˆ˜

async function f() {
  return 1;
}

async๋Š” ํ•จ์ˆ˜ ์•ž์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ํ”„๋ผ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

async function f() {
  return 1;
}

f().then(alert); // 1

โœ๏ธ await

// await๋Š” async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
let value = await promise;

await๋Š” async ํ•จ์ˆ˜ ์•ˆ์— ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์‹คํ–‰๋ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.



โœ๏ธ async & await ์‚ฌ์šฉ๋ฒ•

function timer(time) {
  return new Promise(function(resolve) {
    setTimeout(function() {
      resolve(time)
    }, time)
  })
}

async function number() {
  console.log('inner start')
  var time = await timer(1000)
  console.log('timer:'+time)
  time = await timer(1000)
  console.log('timer:'+time)
   time = await timer(1000)
  console.log('timer:'+time)
  console.log('inner finish')
}

async function numberpuls() {
  console.log('outside start')
  await number()
  console.log('outside finish')
}

numberpuls()

์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด

์ด๋ ‡๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค.


โœจ ์ด๋Ÿฐ ์‹์œผ๋กœ await๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋‹ค๋ฆด ๊ณณ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๊ณ  ์ง„ํ–‰ํ•˜๊ฒŒ ํ•  ๊ณณ์€ ์ง„ํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!



(async () => {
  let response = await fetch('/article/promise-chaining/user.json')
  let user = await response.json()
  ...
})()

await๋Š” ๋ง๊ทธ๋Œ€๋กœ ํ”„๋ผ๋ฏธ์Šค๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜๋กœ ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ ๋ฐ”๋กœ ์ฝ์–ด์ค„ ์ˆ˜๋„ ์žˆ๊ณ ,

async function showAvatar() {

  // JSON ์ฝ๊ธฐ
  let response = await fetch('/article/promise-chaining/user.json');
  let user = await response.json();
  
  // github ์‚ฌ์šฉ์ž ์ •๋ณด ์ฝ๊ธฐ
  let githubResponse = await fetch(`https://api.github.com/users/${user.name}`);
  let githubUser = await githubResponse.json();
  ...
}

์ด๋ ‡๊ฒŒ await๋ฅผ ๋ถ™์—ฌ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ผ๋ฏธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ณ  ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โ›“๏ธ ์ฐธ๊ณ ์‚ฌ์ดํŠธ
โ›“๏ธ ์ฐธ๊ณ ์‚ฌ์ดํŠธ

profile
ํšจ์œจ์„ ์ƒ๊ฐํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

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