[ES6] async/await

JH Choยท2022๋…„ 9์›” 18์ผ
0

es6

๋ชฉ๋ก ๋ณด๊ธฐ
9/11

async

๊ธฐ์กด ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ

    var ํ”„๋กœ๋ฏธ์Šค = new Promise((resolve, reject) => {
      function ๋”ํ•˜๊ธฐ(์ฝœ๋ฐฑ) {
        1 + 1;
      }
      resolve()
    })

    ํ”„๋กœ๋ฏธ์Šค.then(function () {
      console.log('hi')
    })

async์‚ฌ์šฉ

1)

    async function ๋”ํ•˜๊ธฐ() {
      1 + 1;
    } // async์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜ ์‹คํ–‰ ํ›„
      // promise๊ฐ€ ๋‚จ๋Š”๋‹ค

    ๋”ํ•˜๊ธฐ().then(function () {
      console.log('์„ฑ๊ณต')
    })

2)

    async function ๋”ํ•˜๊ธฐ() {
      return 1 + 1;
    }
    ๋”ํ•˜๊ธฐ().then(function (๊ฒฐ๊ณผ) {
      console.log(๊ฒฐ๊ณผ) //2
    })

๐Ÿงจ ์ฃผ์˜ : async๋Š” ์„ฑ๊ณต๋งŒ ํŒ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ•์ œ๋กœ ์‹คํŒจ ๊ฒฐ๊ณผ ๋งŒ๋“œ๋Š” ๋ฒ•

    async function ๋”ํ•˜๊ธฐ() {
      return Promise.reject('์‹คํŒจ')
    }
    ๋”ํ•˜๊ธฐ().then(function (๊ฒฐ๊ณผ) {
      console.log(๊ฒฐ๊ณผ)
    }) //Uncaught (in promise) ์‹คํŒจ

await

    async function ๋”ํ•˜๊ธฐ() {
      var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
        var ํž˜๋“ ์—ฐ์‚ฐ = 1 + 1;
        ์„ฑ๊ณต();
      })

      ํ”„๋กœ๋ฏธ์Šค.then(function () {
        console.log('์„ฑ๊ณตํ–ˆ์Œ')
      })
   }
    ๋”ํ•˜๊ธฐ(); //์„ฑ๊ณตํ–ˆ์Œ.

await ์‚ฌ์šฉํ•˜๋ฉด?

    async function ๋”ํ•˜๊ธฐ() {
      var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
        var ํž˜๋“ ์—ฐ์‚ฐ = 1 + 1;
        ์„ฑ๊ณต('์„ฑ๊ณตํ–ˆ์Œ');
      })

      var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค;
      // await :ํ”„๋กœ๋ฏธ์Šค ์™„๋ฃŒ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค๋ผ.
      // ํŒ์ • ํ›„ ๊ฒฐ๊ณผ๋ฅผ ํ• ๋‹นํ•ด์คŒ.
      console.log(๊ฒฐ๊ณผ)

    }
    ๋”ํ•˜๊ธฐ(); //์„ฑ๊ณตํ–ˆ์Œ.

await์€ ํ”„๋กœ๋ฏธ์Šค.then()์˜ ๊ฐ„๋žตํ•œ ๋ฒ„์ „์ด๋‹ค.
๋˜ํ•œ async ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

await์€ ํ”„๋กœ๋ฏธ์Šค ์‹คํŒจ์‹œ ์—๋Ÿฌ๋‚˜๊ณ  ํ•ด๋‹น ์ฝ”๋“œ์—์„œ
๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฉˆ์ถ˜๋‹ค.

await์—์„œ ํ”„๋กœ๋ฏธ์Šค ์‹คํŒจ์‹œ ์ง„ํ–‰ํ•˜๋„๋ก ํ•ด๊ฒฐํ•˜๊ธฐ

try{} catch{}

    async function ๋”ํ•˜๊ธฐ() {
      var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
        var ํž˜๋“ ์—ฐ์‚ฐ = 1 + 1;
        ์‹คํŒจ('์‹คํŒจ');
      })

      try { var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค;
          /*์ด๊ฑฐ ์ผ๋‹จ ์‹คํ–‰*/} catch { console.log('ํ”„๋กœ๋ฏธ์Šค ์‹คํŒจ์‹œ ์‹คํ–‰') }; //์•ˆ๋˜๋ฉด catch ์‹คํ–‰

      console.log(๊ฒฐ๊ณผ)

    }
    ๋”ํ•˜๊ธฐ(); //ํ”„๋กœ๋ฏธ์Šค ์‹คํŒจ์‹œ ์‹คํ–‰

์˜ˆ์ œ ํ™œ์šฉํ•ด์„œ ์จ๋ณด๊ธฐ

๋ฒ„ํŠผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ํด๋ฆญํ•˜๋ฉด async/await์ด์šฉํ•ด์„œ ์„ฑ๊ณตํ–ˆ์–ด์š” ์ฝ˜์†”์— ์ถœ๋ ฅ.

  • ๋‚ด ํ’€์ด
    const btn = document.querySelector('button')


    async function ๋”ํ•˜๊ธฐ() {
      var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
        ์„ฑ๊ณต('์„ฑ๊ณตํ–ˆ์–ด์š”')
      })
      var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค;
      console.log(๊ฒฐ๊ณผ)

    }
    btn.addEventListener('click', ๋”ํ•˜๊ธฐ())
  • ์ฝ”๋”ฉ์• ํ”Œ ํ’€์ด1)
    async function ๋”ํ•˜๊ธฐ() {
      var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
        document.getElementById('btn').addEventListener('click', function () {
          ์„ฑ๊ณต('์„ฑ๊ณตํ–ˆ์–ด์š”');
        })
      })
      var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค;
      console.log(๊ฒฐ๊ณผ)

    }
    ๋”ํ•˜๊ธฐ()
  • ์ฝ”๋”ฉ์• ํ”Œ ํ’€์ด2)
    var ํ”„๋กœ๋ฏธ์Šค = new Promise(function (์„ฑ๊ณต, ์‹คํŒจ) {
      document.getElementById('btn').addEventListener('click', function () {
        ์„ฑ๊ณต('์„ฑ๊ณตํ–ˆ๋‹ค!');
      })
    })
	
    async function ๋ฒ„ํŠผ๋ˆ„๋ฅด๊ธฐ() {
      var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค;
      console.log(๊ฒฐ๊ณผ)
    } //async await๋ฅผ ์“ฐ๋ฉด ํ”„๋กœ๋ฏธ์Šค์˜ ํŒ์ •์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์‹คํ–‰
     // ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์•ผ ํŒ์ •์„ ๋‚ด๋ ค์ฃผ๋‹ˆ๊นŒ // ๋ˆ„๋ฅด๋ฉด?!!
    ๋ฒ„ํŠผ๋ˆ„๋ฅด๊ธฐ() //์„ฑ๊ณตํ–ˆ๋‹ค!

์ƒ๊ฐํ•ด๋ณด๊ธฐ

 async function ํ”„๋กœ๋ฏธ์Šค() {
      document.getElementById('btn').addEventListener('click', function () {
        return '์„ฑ๊ณตํ–ˆ์–ด์š”'
      });
    }

    async function ๋ฒ„ํŠผ๋ˆ„๋ฅด๊ธฐ() {
      var ๊ฒฐ๊ณผ = await ํ”„๋กœ๋ฏธ์Šค();
      console.log(๊ฒฐ๊ณผ)
    }

    ๋ฒ„ํŠผ๋ˆ„๋ฅด๊ธฐ();

undefined๊ฐ€ ๋œจ๋Š” ์ด์œ ๋Š” ํ”„๋กœ๋ฏธ์Šค()์˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ํด๋ฆญ์„ ํ•ด์•ผ '์„ฑ๊ณตํ–ˆ์–ด์š”'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ฆญ ์ „์— ์ด๋ฏธ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒํƒœ๋ผ์„œ ๋ฒ„ํŠผ๋ˆ„๋ฅด๊ธฐ()๊ฐ€ ์‹คํ–‰๋˜๊ณ  undefined๊ฐ€ ๋œจ๋Š” ๊ฒƒ์ด๋‹ค.

async / await ์™œ ์“ฐ๋ƒ?

  1. async๋Š” ์—๋Ÿฌ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์šฉ์ดํ•˜๋‹ค.
function sample() {
  return sampleFunc()
    .then(data => return data)
    .then(data2 => return data2)
    .then(data3 => return data3)
    .catch(err => console.log(err))  // ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค
}

async function sample() {
  const data1 = await sampleFunc();      // ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ data1๊ฐ’์ด ์œ ํšจ์น˜ ์•Š์Œ
  const data2 = await sampleFunc2(data1);
  return data2;
}
profile
์ฃผ๋จน๊ตฌ๊ตฌ์‹์€ ๋ฒ„๋ฆฌ๊ณ  Why & How๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์ž!

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