๐Ÿฆœ Computer Language/JavaScript

[JavaScript] async & await | ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

async & await

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด์œผ๋กœ, ๊ธฐ์กด์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ Promise์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค. (์•„์ง Promise๋„ ์ž˜ ๋ชจ๋ฅด๋Š”๋ฐ..^^)

async function ํ•จ์ˆ˜๋ช…(){
	await ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฉ”์„œ๋“œ๋ช…();
}

 

 

async

async ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ค€ ํ•จ์ˆ˜์˜ return ๊ฐ’์€ ๋น„๋™๊ธฐ ๊ฐ์ฒด์ธ Promise์˜ resolve ๊ฐ’์ด ๋œ๋‹ค.

์ฆ‰, Promise์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป๋Š”๋‹ค.

 

async function helloAsync(){
	return new Promise(function(resolve, reject){
    	var s = "Hello, Async!";
        resolve(s)
    });
}

async function logSentence(){
	var say = await helloAsync();
    console.log(say); 
}

logSentence();  // "Hello, Async!"

 

 

async๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด Promise์˜ ๊ฒฐ๊ณผ๊ฐ’์„ returnํ•˜๋ฏ€๋กœ then๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

async function helloAsync() {
	return "Hello, Async!";
}

helloAsync().then((res)=> {
	console.log(res);
}); // Hello, Async!

 

await

await ํ‚ค์›Œ๋“œ๋ฅผ ๋น„๋™๊ธฐํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์•ž์— ๋ถ™์ด๊ฒŒ ๋˜๋ฉด, ๋น„๋™๊ธฐํ•จ์ˆ˜๊ฐ€ ๋งˆ์น˜ ๋™๊ธฐ์ ์ธ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰, await ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์€ ๋’ค์— ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

 

function delay(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      return resolve();
    }, ms);
  });
}

async function helloAsync() {
  await delay(3000);	// ๋™๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— 3์ดˆ ํ›„์— hello async ์ถœ๋ ฅ๋จ
  return "hello async";
}

helloAsync().then((res) => {
  console.log(res);
});

async function main() {
	const res = await helloAsync(); // await์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ ํ•จ์ˆ˜์˜ return ๊ฐ’๋„ ๋ฐ›์•„์˜ฌ ์ˆ˜ O
    console.log(res);
}

main();