๐Ÿ“– [JavaScript] async, await

ํ˜ฑยท2022๋…„ 9์›” 10์ผ

JavaScript_Intermediate

๋ชฉ๋ก ๋ณด๊ธฐ
18/19
post-thumbnail

๐Ÿ”Ž async, await

Promise์—์„œ thenํ˜•์‹์„ chain ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง

๐Ÿ“Œ async

async function getName() {
  return 'mike';
}

getName().then(name=>{
  console.log(name);
});
//mike

ํ•จ์ˆ˜ ์•ž์— async๋ฅผ ๋„ฃ์œผ๋ฉด ํ•ญ์ƒ promise๋ฅผ ๋ฐ˜ํ™˜

๐Ÿ“Œ await

async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
await ํ‚ค์›Œ๋“œ ์˜ค๋ฅธ์ชฝ์—๋Š” promise๊ฐ€ ์˜ค๊ณ , ๊ทธ promise ์ฐจ๋ก€๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ

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();
//1์ดˆ ๋’ค์— mike๊ฐ€ ์ฐํž˜

โœ”๏ธ async, await๋กœ promise์ฝ”๋“œ ๋ฐ”๊ฟ”๋ณด๊ธฐ

๐Ÿ”— 1. Promise ์ฝ”๋“œ

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('์‹œ์ž‘');
f1()
  .then(res => f2(res))
  .then(res => f3(res))  
  .then(res => console.log(res));
  .catch(conole.log)
  .finally(()=>{
    console.log('๋');
  });

๐Ÿ”— 2. async, await ์ฝ”๋“œ

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);
    });
  };

async function order(){
    const result1=await f1();
    const result2=await f2(result1);
    const result3=await f1(result2);
    console.log(result3);
    console.log('์ข…๋ฃŒ');
  }
order();

//1๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ 2๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ 3๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ ์ข…๋ฃŒ 

๐Ÿ“Œ try catch

๐Ÿค” 2๋ฒˆ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด?
โญ๏ธpromise์˜ catch=> async, await์˜ try catchโญ๏ธ

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

const f3= (message) => {
  console.log(message);
  return new Promise((res, rej) => {
    setTimeout(()=>{
      res('3๋ฒˆ ์ฃผ๋ฌธ ์™„๋ฃŒ);
          }, 2000);
    });
  };
                     
async function order(){
    try{
      const result1=await f1();
      const result2=await f2(result1);
      const result3=await f1(result2);
      console.log(result3);
    } catch (e) {
    console.log(e);
  } 
    console.log('์ข…๋ฃŒ');
}
order();
//์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ฐ๊ณ  3๋ฒˆ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋จ

โœ”๏ธ promise.all

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

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);
    });
  };

async function order(){
    try{
      const result=await Promise.all([f1(), f2(), f3()]);
      console.log(result);
    } catch (e) {
    console.log(e);
  } 
    console.log('์ข…๋ฃŒ');
}
order();
profile
new blog: https://hae0-02ni.tistory.com/

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