Frontend/Javascript

[Javascript] async์™€ await

oneyenee 2024. 2. 15. 23:44

๐Ÿ’ก async ? await ?

  • ES2017์— ๋„์ž…๋œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•
  • Promise ๋กœ์ง์„ ๋” ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
  • Promise๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ๊ณ  ๋ณด์ด๋Š” ๋ฌธ๋ฒ•์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’ํžˆ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ๋” ๋งŒ๋“  ๋ฌธ๋ฒ•

 

 

โœ” ์‚ฌ์šฉ๋ฒ•

function ํ‚ค์›Œ๋“œ ์•ž์— async ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์•ž์— await ๋ฅผ ๋ถ™์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

 

1) async

  • async๋ฅผ ๋ถ™์ธ ํ•จ์ˆ˜๋Š” promise๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ๋œ๋‹ค.
  • async๋ฅผ ๋ถ™์ธ ํ•จ์ˆ˜์˜ return ๊ฐ’์€ promise์˜ resolve ํ•จ์ˆ˜์˜ argument์™€ ๊ฐ™๋‹ค.

 

/* ํ•จ์ˆ˜ ์„ ์–ธ์‹ */
async function helloAsync() {
	return 'hello Async'
}


/* ํ•จ์ˆ˜ ํ‘œํ˜„์‹ */
const helloAsync2 = async () => {
	return 'hello Async2'
}

 

 

2) await

  • await์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์•ž์— ์ž‘์„ฑํ•œ๋‹ค.
  • await์„ ์ž‘์„ฑํ•˜๋ฉด ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋™๊ธฐ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ˆœ์ฐจ์ ์œผ๋กœ)
  • await์€ async ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

async function main() {
	const res = await helloAsync();
    	const res2 = await helloAsync2();
	console.log(res, res2);
}

main(); // 'hello Async hello Async2'

 

 

 

โœ” ์˜ˆ์‹œ

์•ž์„œ ํฌ์ŠคํŒ…ํ•œ Promise ๊ฒŒ์‹œ๊ธ€์˜ ์˜ˆ์‹œ๋ฅผ async await๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ฆฌํ•ด๋ณด์ž.

 

2024.02.15 - [Frontend/Javascript] - [Javascript] ์ฝœ๋ฐฑ ์ง€์˜ฅ ํƒˆ์ถœํ•˜๊ธฐ - Promise

 

[Javascript] ์ฝœ๋ฐฑ ์ง€์˜ฅ ํƒˆ์ถœํ•˜๊ธฐ - Promise

๐Ÿ’ก ์ฝœ๋ฐฑ ์ง€์˜ฅ (Callback Hell) ? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ, ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์ฝœ๋ฐฑ ๋‚ด๋ถ€์—์„œ ๋˜๋‹ค๋ฅธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

oneyenee.tistory.com

 

 

1) Promise ๋ฐฉ์‹

function promiseA(a, b) {
	return new Promise((resolve, reject) => {
            setTimeOut(()=>{ resolve(a+b) }, 3000)
        })
}

function promiseB(a) {
	return new Promise((resolve, reject) => {
            setTimeOut(()=>{ resolve(a*2) }, 1000)
        })
}

function promiseC(a) {
	return new Promise((resolve, reject) => {
            setTimeOut(()=>{ resolve(a*-1) }, 2000)
        })
}

promiseA(3,5)
	.then((a_res)=>{
            console.log('A ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’ : ', a_res);
            return promiseB(a_res);
        })
        .then((b_res)=>{
            console.log('B ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’ : ', b_res);
            return promiseC(b_res);
        })
        .then((c_res)=>{
            console.log('C ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’ : ', c_res);
        })

 

 

2) async await ๋ฐฉ์‹

 

const delay = async (ms) => {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
};

const asyncA = async (a, b, ms) => {
  await delay(ms);
  return a + b;
};

const asyncB = async (a, ms) => {
  await delay(ms);
  return a * 2;
};

const asyncC = async (a, ms) => {
  await delay(ms);
  return a * -1;
};

async function main() {
  const a_res = await asyncA(3, 5, 3000);
  console.log(a_res);
  const b_res = await asyncB(a_res, 1000);
  console.log(b_res);
  const c_res = await asyncC(b_res, 2000);
  console.log(c_res);
}

main();

 

 

์ฝ˜์†” ์ฐ๋Š” ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ  ๋ณด๋ฉด promise๋กœ .then์„ ์—ด๊ฑฐํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.