Input + Output = True

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Promise async await ์„ค๋ช… ๋ฐ ์˜ˆ์ œ ๋ณธ๋ฌธ

๐ŸŽจFrontEnd/Javascript

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Promise async await ์„ค๋ช… ๋ฐ ์˜ˆ์ œ

IOTrue 2023. 3. 21. 17:07

๐Ÿ˜Ž์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Promise async await ์„ค๋ช… ๋ฐ ์˜ˆ์ œ

 

โœ… JavaScript Promise ๋ž€?

JavaScript Promise๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

์–ด๋–ค ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, Promise๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

Promise๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด
  • Promise์˜ ์ƒํƒœ๋Š” ๋Œ€๊ธฐ(Pending), ์ดํ–‰(Fulfilled), ๊ฑฐ๋ถ€(Rejected) ์„ธ ๊ฐ€์ง€ ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • Promise๋Š” ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Promise๋Š” ๋Œ€๊ธฐ(Pending) ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•ด ์ดํ–‰(Fulfilled) ๋˜๋Š” ๊ฑฐ๋ถ€(Rejected) ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

์ดํ–‰ ์ƒํƒœ๋Š” Promise๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฑฐ๋ถ€ ์ƒํƒœ๋Š” Promise์˜ ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ 

์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ์ธํ•ด Promise์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, Promise ๊ฐ์ฒด๋Š” ๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

์ฆ‰, ์ดํ–‰ ๋˜๋Š” ๊ฑฐ๋ถ€ ์ƒํƒœ์— ๋„๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋ฐ˜ํ™˜๋œ ์ƒํƒœ๋Š” ๋” ์ด์ƒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

Promise๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ , ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ์˜ค๋ฅ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

promise ์‚ฌ์šฉ ์˜ˆ์‹œ

const status = true
const promise = new Promise((resolve, reject) => {
  if (status) {
    resolve('์„ฑ๊ณต')
  } else {
    reject('์‹คํŒจ')
  }
});

promise
  .then((res) => { //์„ฑ๊ณต ์‹คํ–‰์ฝ”๋“œ
    console.log(res);
  })
  .catch((error) => { //์‹คํŒจ ์‹คํ–‰์ฝ”๋“œ
    console.log(error);
  });

์กฐ๊ฑด(status ๊ฐ’)์ด ์ฐธ์ด๋ฉด resolve(์„ฑ๊ณต) ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์•„๋‹ˆ๋ฉด reject(์‹คํŒจ) ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

resolve ๋ฐ˜ํ™˜ ๊ฐ’์€ then()์„ ํ†ตํ•ด ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ 

reject์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ catch() ๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

then()๊ณผ catch()์˜ ์ฒด์ด๋‹์„ ํ†ตํ•ด ๋น„๋™๊ธฐ ๋กœ์ง์˜ ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ… async / await ๋ž€?

callback ํ•จ์ˆ˜๋‚˜ Promise์˜ ๋‹จ์ ์€ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ณ 

์ฝœ๋ฐฑ ์ง€์˜ฅ, then()์ง€์˜ฅ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

async/await๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•์œผ๋กœ callback ์ด๋‚˜ Promise์˜ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด์†Œํ•˜๊ณ ์ž ๋งŒ๋“ค์–ด์กŒ๋‹ค.

async/await๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์ด ์žˆ๋Š”๋ฐ, await๋Š” async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

 

async/await ์‚ฌ์šฉ ์˜ˆ์‹œ

(async () => {
  const status = true;
  const promise = new Promise((resolve, reject) => {
    if (status) {
      resolve('์„ฑ๊ณต');
    } else {
      reject('์‹คํŒจ');
    }
  });

  try {
    const result = await promise //await ๋ฅผ ํ†ตํ•ด Promise ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    console.log(result)
  } catch (error) {
    console.log(error)
  }
})();

๋˜๋Š”

async function callAsync() {
  try{
    const data = await fetch('api') //1. fetch ์‹คํ–‰ ํ›„
    if(data !== undefined) { //2. ์ด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค
      console.log(data);
    }
  } catch (error) { //์—๋Ÿฌ ํ•ธ๋“ค๋ง
    console.log(error)
  }
}
callAsync()

 

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

๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ฃผ์˜ํ•  ์ ์€ async/await์€ Promise์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—

try/catch๋ฌธ์„ ํ™œ์šฉํ•ด์„œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ํ•ด์•ผํ•œ๋‹ค.

 

 

โœ… Promise async/await ์ฐจ์ด์ 

  • ๊ฐ€๋…์„ฑ
    • Promise๋Š” .then() ์ง€์˜ฅ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก, async/await๋ฅผ ํ™œ์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค.
    • async/await์€ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ฝ”๋“œ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์—๋Ÿฌ ํ•ธ๋“ค๋ง
    • Promise๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” .catch() ๋ฌธ์„ ํ†ตํ•ด ์—๋Ÿฌ ํ•ธ๋“ค๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • async/await์€ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ธฐ๋Šฅ์ด ์—†์–ด์„œ try-catch() ๋ฌธ์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

์ฐธ๊ณ 

Promise : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

async/await : https://ko.javascript.info/async-await

Comments