js

javascript async, await

์œถโ‰ 2022. 11. 1. 22:27

* async, await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๋ฏธ์Šค์˜ ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒด์ด๋‹ ํ˜•์‹์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง.

* async: ํ•ญ์ƒ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜

async function getName(){
  return "Mike";
}
console.log(getName());

 

- ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  then์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

async function getName(){
  return "Mike";
}
getName().then((name)=>{
  console.log(name);
}); //Mike

- ๋งŒ์•ฝ ๋ฐ˜ํ™˜ ๊ฐ’์ด Promise๋ฉด ๊ทธ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

async function getName(){
  return Promise.resolve("tom");
}
getName().then((name)=>{
  console.log(name);
}); //tom

- ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ rejected ์ƒํƒœ์˜ Promise๊ฐ€ ๋ฐ˜ํ™˜๋จ.

async function getName(){
  throw new Error("err,,");
}
getName().catch((err)=>{
  console.log(err);
});

 

*await: async ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ. await ํ‚ค์›Œ๋“œ์˜ ์˜ค๋ฅธ์ชฝ์—๋Š” Promise๊ฐ€ ์˜ค๊ณ  ๊ทธ promise๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ. ์—ฌ๊ธฐ์„œ๋Š” 1์ดˆ ํ›„์— Mike๊ฐ€ console ์ฐฝ์— ์ฐํž˜.

-result์˜ getName์—์„œ resolve ๋œ ๊ฐ’์„ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ

function getName(name){
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      resolve(name);
    },1000);
  });
}
async function showName(){
  const result = await getName('Mike');
  console.log(result);
}

console.log("์‹œ์ž‘");
showName();
// ์‹œ์ž‘ -> Mike

์˜ˆ์‹œ) resolve

const f1 = () =>{
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      res("1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
    },1000);
  });
};
const f2 = (message) =>{
  console.log(message);
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      res("2๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
    },3000);
  });
};
const f3 = (message) =>{
  console.log(message);
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      res("3๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
    },2000);
  });
};

console.log('์‹œ์ž‘');
async function order(){
  const result1 = await f1();
  const result2 = await f2(result1);
  const result3 = await f3(result2);
  console.log(result3);
  console.log("์ข…๋ฃŒ");
}
order();
// ์‹œ์ž‘ -> 1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ -> 2๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ -> 3๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ -> ์ฃต๋ฃŒ

=> Promise then ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ฐ€๋…์„ฑ ํ›จ์”ฌ ๋›ฐ์–ด๋‚จ

 

- reject์—์„œ๋Š” try ~ catch ๋ฅผ ์ด์šฉํ•ด ๊ฐ์‹ธ์ฃผ๋ฉด err ๋ฉ”์‹œ์ง€ ๋œจ๊ณ  ์ข…๋ฃŒ๊นŒ์ง€ ๋‚˜ํƒ€๋‚จ. try ~ catch ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด 1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ๊นŒ์ง€ ๋‚˜ํƒ€๋‚˜๊ณ  ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์—ฌ ์ง„ํ–‰ x

const f1 = () =>{
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      res("1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
    },1000);
  });
};
const f2 = (message) =>{
  console.log(message);
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      // res("2๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
      rej(new Error("err,,"));
    },3000);
  });
};
const f3 = (message) =>{
  console.log(message);
  return new Promise((res,rej)=>{
    setTimeout(()=>{
      res("3๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ");
    },2000);
  });
};

console.log('์‹œ์ž‘');
async function order(){
  try {
    const result1 = await f1();
    const result2 = await f2(result1);
    const result3 = await f3(result2);
    console.log(result3);
  } catch(e){
    console.log(e);
  }
  console.log("์ข…๋ฃŒ");
}
order();
// ์‹œ์ž‘-> 1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ ->Error: err,, -> ์ข…๋ฃŒ

โ—Ž Promise.all ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ: async await ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋„ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

console.log('์‹œ์ž‘');
async function order(){
  try {
    const result = await Promise.all([f1(), f2(), f3()])
    console.log(result)
  } catch(e) {
    console.log(e);
  }
  console.log("์ข…๋ฃŒ");
}
order();

 

 

'js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

javascript Generator  (0) 2022.11.02
javascript ํ”„๋กœ๋ฏธ์Šค (Promise)  (0) 2022.11.01
javascript ํด๋ž˜์Šค(class)  (0) 2022.11.01
javascript ์ƒ์†, ํ”„๋กœํ† ํƒ€์ž…(Prototype)  (0) 2022.10.31
javascript ๋ฉ”์„œ๋“œ call, apply, bind  (0) 2022.10.31