Callback,Promise,async/await

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • Callback ํ•จ์ˆ˜

  • Promise

  • async/await

Callback ํ•จ์ˆ˜

  • ๋‹ค๋ฅธํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธ

  • ์–ด๋–ค ์ž‘์—…์ด ๋๋‚˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์‹คํ–‰ํ•  ์ž‘์—…์œผ๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ

๐Ÿค” ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š”?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™๊ธฐ์  ๋ฐฉ์‹์œผ๋กœ ํ•œ๋ฒˆ์— ํ•œ๊ฐ€์ง€ ์ผ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ ๊ฐ™์ด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ์ข…๋ฃŒ ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผํ•ด๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด์™€ ๊ฐ™์ด ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ ๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๊ฑฐ๋‚˜, ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์‹คํ–‰ํ•  ์ž‘์—…์„ ์ฝœ๋ฐฑํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด๋ณด์ž

function task1() {
  console.log('์ฒซ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
}

function task2() {
  // โœ… ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜ ๋กœ์ง์ด ์žˆ๋‹ค๋ฉด?
  setTimeout(() => {
    console.log('๋‘๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
  }, 2000);
}

function task3() {
  console.log('์„ธ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
}

function task4() {
  console.log('๋„ค๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
}

task1();
task2();
task3();
task4();

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด task2 ํ•จ์ˆ˜๋‚ด๋ถ€์—๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜ setTimeout ์กด์žฌํ•œ๋‹ค. ๋‚ด๊ฐ€ ์˜๋„ํ–ˆ๋˜๊ฑด task1 โ†’ task2 โ†’ task3 โ†’ task4 ์ˆœ์œผ๋กœ ๋™์ž‘ํ•˜๊ธธ ์›ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ task1 โ†’ task3 โ†’ task4 โ†’ task2 ์ˆœ์œผ๋กœ ๋™์ž‘๋˜์–ด ์˜๋„ํ•œ ๋ฐฉํ–ฅ๊ณผ๋Š” ๋‹ฌ๋ž๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž!

function task1(callback) {
  console.log('์ฒซ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
  callback();
}

function task2(callback) {
  // โœ… ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜ ๋กœ์ง์ด ์žˆ๋‹ค๋ฉด?
  setTimeout(() => {
    console.log('๋‘๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
    callback();
  }, 2000);
}

function task3(callback) {
  console.log('์„ธ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
  callback();
}

function task4(callback) {
  console.log('๋„ค๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜');
  callback();
}

task1(() => {
  task2(() => {
    task3(() => {
      task4(() => {
        console.log('๋ชจ๋“  ํ•จ์ˆ˜ ์‹คํ–‰ ์™„๋ฃŒ!!');
      });
    });
  });
});

๐Ÿ˜ฑ ์ฝœ๋ฐฑ์ง€์˜ฅ(Callback hell)

  • ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜๋“ค์ด ์ค‘์ฒฉ๋˜์–ด indent(๋“ค์—ฌ์“ฐ๊ธฐ)๊ฐ€ ์ ์  ๊นŠ์–ด์ง€๋Š” ํ˜•ํƒœ๋กœ ๋˜๊ณ  ์ด์™€๊ฐ™์ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์•ˆ์ข‹์•„์ง€๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์„ ์ฝœ๋ฐฑ์ง€์˜ฅ, Callback hell์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Promise

  • ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ES6 ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ˆ˜ ๊ฐ์ฒด (๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด)

  • ๋‘๊ฐœ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋ฐ, ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” resolve ํ•จ์ˆ˜์™€ ์ž‘์—…์ด ์‹คํŒจํ–ˆ์„๋–„ ์—๋Ÿฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” reject ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๊ธฐ๋ณธ ๋ฌธ๋ฒ•

  • new ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ

  • resolve, reject๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ํ•จ์ˆ˜ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

    • resolve : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜

    • reject : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ–ˆ์„ ๋•Œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success');
    reject('fail');
  }, 2000);
});

promise
  .then((res) => {
    console.log(res); // success
  })
  .catch((err) => {
    console.log(err); // fail
  });

๐Ÿ”„ Promise 3๊ฐ€์ง€ ์ƒํƒœ

pending(๋Œ€๊ธฐ)

  • new Promise() ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์•„์ง ์™„๋ฃŒ ๋˜์ง€ ์•Š์€ ์ƒํƒœ

fulfilled(์ดํ–‰)

  • ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€ ์ƒํƒœ

  • then ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('success'); // ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด resolve()ํ•จ์ˆ˜ ์‹คํ–‰
  }, 2000);
});

promise.then((res) => {
  // resolve()์˜ ๊ฒฐ๊ณผ๊ฐ’ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  console.log(res);
});

rejected(์‹คํŒจ)

  • ๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ

  • ์‹คํŒจ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ์‹คํŒจํ•œ ์ด์œ ๋ฅผ catch๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject('fail'); // ๋น„๋™๊ธฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํŒจํ•˜๋ฉด reject()ํ•จ์ˆ˜ ์‹คํ–‰
  }, 2000);
});

promise.catch((res) => {
  // reject()์˜ ์‹คํŒจ์ด์œ ๋ฅผ ์ „๋‹ฌ ๋ฐ›์•„ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  console.log(res);
});

โ›“๏ธ Promise ์ฒด์ด๋‹

  • Promise ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐ์ง€์–ด ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ

promise
  .then((value) => {
    console.log(value);
  })
  .catch((error) => {
    console.log(error);
  });

๐Ÿ˜ฑ Promise hell๋„ ์กด์žฌํ•œ๋‹ค

  • ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด then ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ์ธ์ž๋กœ ๋ฐ›์•„์™€์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค์‹œ then ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๋˜ then,then,... ์™€ ๊ฐ™์ด ์ž‘์—…์ด ๋ฌด์ˆ˜ํžˆ ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑ์ง€์˜ฅ์— ์ด์–ด ํ”„๋กœ๋ฏธ์Šค ํ—ฌ์ด๋ผ๋Š” ํ‘œํ˜„๋„ ์žˆ๋‹ค.

function sum(num) {
  const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      if (typeof num === 'number') {
        resolve(num + 1);
      } else {
        reject('num์ด ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.');
      }
    }, 2000);
  });

  return promise;
}

sum(0).then((result) => {
  console.log(`๊ฒฐ๊ณผ : ${result}`);
  sum(result).then((result2) => {
    console.log(`๊ฒฐ๊ณผ : ${result2}`);
    sum(result2).then((result3) => {
      console.log(`๊ฒฐ๊ณผ : ${result3}`);
      sum(result3).then((result4) => {
        console.log(`๊ฒฐ๊ณผ : ${result4}`);
      });
    });
  });
});

๐Ÿ”ฅ return ํ™œ์šฉํ•ด Promise hell ํ•ด๊ฒฐํ•˜์ž

  • return๋กœ promise๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด hell์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

sum(0)
  .then((result) => {
    console.log(`๊ฒฐ๊ณผ : ${result}`);
    return sum(result); // ๐Ÿ‘ˆ๐Ÿป promise ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  })
  .then((result2) => {
    console.log(`๊ฒฐ๊ณผ : ${result2}`);
    return sum(result2);
  })
  .then((result3) => {
    console.log(`๊ฒฐ๊ณผ : ${result3}`);
    return sum(result3);
  })
  .then((result4) => {
    console.log(`๊ฒฐ๊ณผ : ${result4}`);
    return sum(result4);
  })
  .catch((err) => {
    console.log(`๊ฒฐ๊ณผ : ${err}`);
  });

Promise์˜ ์ •์  ๋ฉ”์„œ๋“œ

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ฐ๊ฐ€์˜ ๋น„๋™๊ธฐ ํ˜ธ์ถœ ์ˆœ์„œ๊ฐ€ ์ƒ๊ด€ ์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ฃผ์–ด์ง„ ํ”„๋กœ๋ฏธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ, ์ „์ฒด๋ฅผ reject ์ฒ˜๋ฆฌํ•œ๋‹ค.

function getEmoticon(icon) {
  const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      if (typeof icon === 'string') {
        resolve(icon);
      } else {
        reject('์ด๋ชจํ‹ฐ์ฝ˜์„ ๋„ฃ์–ด์ฃผ์„ธ์š”!');
      }
    }, 2000);
  });

  return promise;
}

Promise.all([getEmoticon('๐ŸŽ'), getEmoticon('๐ŸŒ'), getEmoticon('๐Ÿ‰')]).then(
  (results) => {
    console.log(results); // [ '๐ŸŽ', '๐ŸŒ', '๐Ÿ‰' ]
  }
);

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € fulfilled ๋œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ

function getEmoticon(icon, ms) {
  const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      if (typeof icon === 'string') {
        resolve(icon);
      } else {
        reject('์ด๋ชจํ‹ฐ์ฝ˜์„ ๋„ฃ์–ด์ฃผ์„ธ์š”!');
      }
    }, ms);
  });

  return promise;
}

Promise.race([
  getEmoticon('๐ŸŽ', 4000),
  getEmoticon('๐ŸŒ', 2000),
  getEmoticon('๐Ÿ‰', 1000),
]).then((results) => {
  console.log(results); // ๐Ÿ‰ ๋งŒ ๋ฐ˜ํ™˜๋จ.
});

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‘ fulfilled ๋‚˜ reject ๋œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ•˜๋Š” promise๋ฅผ ๋ฐ˜ํ™˜

function getEmoticon(icon, ms) {
  const promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      if (typeof icon === 'string') {
        resolve(icon);
      } else {
        reject('์ด๋ชจํ‹ฐ์ฝ˜์„ ๋„ฃ์–ด์ฃผ์„ธ์š”!');
      }
    }, ms);
  });

  return promise;
}

Promise.allSettled([
  getEmoticon('๐ŸŽ', 4000),
  getEmoticon(2, 2000),
  getEmoticon('๐Ÿ‰', 1000),
]).then((results) => {
  console.log(results);
});

// ์ถœ๋ ฅ๊ฒฐ๊ณผ
/**
[
  { status: 'fulfilled', value: '๐ŸŽ' },
  { status: 'rejected', reason: '์ด๋ชจํ‹ฐ์ฝ˜์„ ๋„ฃ์–ด์ฃผ์„ธ์š”!' },
  { status: 'fulfilled', value: '๐Ÿ‰' }
]
*/

async/await

  • Promise๋ฅผ ์กฐ๊ธˆ ๋” ๊ฐ„ํŽธํ•˜๊ณ , ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ฌธ๋ฒ•

โœ… async/await๋Š” promise ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. promise์˜ then,catch,finally ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์ด ๋งˆ์น˜ ๋™๊ธฐ์ฒ˜๋Ÿผ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ๋ฌธ๋ฒ•

  • ํ•จ์ˆ˜ ์•ž์— async๋ฅผ ๋ถ™์ด๋ฉด ๋น„๋™๊ธฐ์ ์ธ ํ•จ์ˆ˜์ด๊ณ , Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค ๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ , ๋ฐ˜ํ™˜ ๊ฐ’์ด Promise ์ƒ์„ฑํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ์–ด๋„ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์„ Promise ๊ฐ์ฒด์— ๋„ฃ๋Š”๋‹ค.

const getData = async (url) => {
  const response = await fetch(url); // ๐Ÿ‘ˆ๐Ÿป Promise์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์ด ๋˜๊ธฐ์ „๊นŒ์ง„ ๋‹ค์Œ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
  const result = await response.json();
  console.log(result);
};
  • await์€ asyncํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์•ž์— await๋ฅผ ๋ถ™์ด๋ฉด Promise๊ฐ€ ์„ฑ๊ณต ์ƒํƒœ ๋˜๋Š” ์‹คํŒจ ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค์Œ ์—ฐ์‚ฐ์„ ํ•˜์ง€์•Š์•„ ๋™๊ธฐ์ ์œผ๋กœ ์ž‘๋™๋œ๋‹ค.

async/await ์˜ˆ์™ธ์ฒ˜๋ฆฌ

  • Promise๋„ ํ›„์† ์ฒ˜๋ฆฌ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก then ๋‚ด๋ถ€์— ์ฝ”๋“œ๊ฐ€ ์ค‘์ฒฉ๋˜๋ฉด์„œ ์ฝ”๋“œ ํ๋ฆ„์ด ๋ณต์žกํ•ด์ง€๋Š” ์ƒํ™ฉ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด try/catch ์œผ๋กœ ๊ฐ„๋‹จํžˆ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

const getData = async (url) => {
  try {
    const response = await fetch(url);
    const result = await response.json();
    console.log(result);
  } catch (error) {
    console.log(error);
  }
};

๐Ÿ”— ์ฐธ๊ณ 

Last updated