๐Ÿ’ป Promise, async์™€ await

waterglassesยท2022๋…„ 4์›” 5์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
13/50
post-thumbnail

์ด ๊ธ€์€ Promise์™€ async์™€ await ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค.
โš ๏ธ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์€ ์˜คํƒ€๋‚˜ ์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

๐Ÿ“ƒ ์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ ๊ฒƒ

Promise

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•˜๋‚˜์˜ ํŒจํ„ด์œผ๋กœ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฝœ๋ฐฑ ํ—ฌ์—์„œ ์–ด๋Š์ •๋„ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

Promise ์ƒ์„ฑ

Promise ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋ฐ ์ด ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” resolve์™€ reject ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.

// Promise ๊ฐ์ฒด์˜ ์ƒ์„ฑ
const promise = new Promise((resolve, reject) => {
  // ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  if (/* ๋น„๋™๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰ ์„ฑ๊ณต */) {
    resolve('result');
  }else { /* ๋น„๋™๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰ ์‹คํŒจ */
    reject('failure reason');
  }
});

Promise ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์„ฑ๊ณต(fulfilled)ํ•˜์˜€๋Š”์ง€ ๋˜๋Š” ์‹คํŒจ(rejected)ํ•˜์˜€๋Š”์ง€ ๋“ฑ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ–๋Š”๋‹ค.

ํ”„๋กœ๋ฏธ์Šค์˜ ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ

Promise ๊ฐ์ฒด๋Š” ์ƒํƒœ์— ์— ๋”ท๋ผ ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒด์ด๋‹ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

then
then ๋ฉ”์†Œ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ์„ฑ๊ณต(resolve ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ƒํƒœ) ์‹œ ํ˜ธ์ถœ๋˜๊ณ  ๋‘ ๋ฒˆ์งธ ํ•จ์ˆ˜๋Š” ์‹คํŒจ(reject ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ ์ƒํƒœ) ํ˜ธ์ถœ๋œ๋‹ค.
then ๋ฉ”์†Œ๋“œ๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

catch
์˜ˆ์™ธ(๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์™€ then ๋ฉ”์†Œ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
catch ๋ฉ”์†Œ๋“œ๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

promiseWork()
  .then(result => {
    return promiseNextWork(result)
  }).then(result => {
    return promiseNextWork(result)
  }).then(result => {
    return promiseNextWork(result)
  }).catch(e => {
    alert('์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”~')
  }).finally(() => {
    alert('์ž‘์—…์ด ๋๋‚จ)
  })

ํ”„๋กœ๋ฏธ์Šค ์ฒด์ด๋‹

ํ”„๋กœ๋ฏธ์Šค๋Š” ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ๋Š” ์ฒด์ด๋‹ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ์จ ์ฝœ๋ฐฑ ํ—ฌ์„ ํ•ด๊ฒฐํ•œ๋‹ค.

Async์™€ Await

Promise์™€ ์—ฐ๊ด€์ด ๊นŠ๋‹ค. Promise๊ฐ€ ์ฝœ๋ฐฑ ๊นŠ์ด๋ฅผ 1๋‹จ๊ณ„๋กœ ์ค„์—ฌ์ฃผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ถˆํŽธํ•œ ๊ฒƒ์€ ์‚ฌ์‹ค์ด๋‹ค.
์—ฌ๊ธฐ์— async์™€ await ๋ฅผ ์ด์šฉํ•˜๋ฉด Promise๋ฅผ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.(์‹คํ–‰์€ ๋น„๋™๊ธฐ๋กœ ๋จ!)

async์™€ await ์˜ˆ์‹œ

const init = async () => {
    const data = await request("https://www.waterglasses.codes/${id}");
    this.setState({
      ...this.state,
      todos: data,
    });
  };

๐Ÿ”ฅ ์˜ค๋Š˜์˜ ๋Š๋‚€์ 

๋ฆฌ์•กํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ async/await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ promise๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ๋กœ ๊ตฌํ˜„ํ•ด์™”์—ˆ๋‹ค. ์˜ค๋Š˜ ๋ฐฐ์šฐ๋ฉด์„œ ์•„~ ์ด๊ฒŒ ํ”„๋กœ๋ฏธ์Šค ์˜€๊ตฌ๋‚˜ ํ•˜๊ณ  ๊นจ๋‹ฌ์•˜๋‹ค.๐Ÿ˜ฅ ์•„ ๊ทธ๋ž˜๋„ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์Šต๊ด€์€ ์žˆ์–ด์„œ ๋‹คํ–‰์ด๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด์„œ ํ•œ๋ฒˆ ๊นŠ์ด ํŒŒ๋ด์•ผ๊ฒ ๋‹ค.
๊ณผ์ œ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š”๋ฐ.. ์Šคํ„ฐ๋””๋„ ์žˆ๊ณ  ์ž๊พธ ๋ฏธ๋ฃจ๊ฒŒ ๋œ๋‹ค. ๋‚ด์ผ์€ ๊ผญ ์‹œ์ž‘ํ•˜์ž!

๐Ÿ—ฃ ์˜ค๋Š˜์˜ TMI

์ €๋…์œผ๋กœ ์‹ ๋ผ๋ฉด์„ ๋จน์—ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ๋งค์› ๋‹ค.. ๐Ÿฅต

Refer

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค
ํ”„๋กœ๋ฏธ์Šค

์˜ค๋Š˜์˜ ๋‚ด์šฉ ์ •๋ฆฌ

๋ฐ๋ธŒ์ฝ”์Šค Day12 Promise

profile
๋งค ์ˆœ๊ฐ„ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

comment-user-thumbnail
2022๋…„ 4์›” 5์ผ

๋ชธ์€ ์ข€ ๊ดœ์ฐฎ์œผ์‹ ๊ฐ€์š”?!?! ์–ด์ œ ์—ด์ด ๋†’๊ฒŒ ์˜ค๋ฅด์…จ๋˜๊ฑฐ ๊ฐ™์€๋ฐ...
์ €๋„ ๋ฆฌ์•กํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ, async/await ๋ž‘ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ณ  ๊ฐœ๋ฐœํ–ˆ์—ˆ๋Š”๋ฐ,
์ด์ œ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•„๋‹ˆ๊น ๊ทธ๋™์•ˆ ๋‚˜์™”๋˜ ์ˆ˜๋งŽ์€ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ํ•ด๋‹ต์ด ๋‚˜์˜ค๋„ค์š”...

ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์ง€๋งŒ, ์ž˜ ์ฑ™๊ฒจ์„œ ๋‘ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก์•„๋ด…์‹œ๋‹ค!
๊ฑด๊ฐ• ์กฐ์‹ฌํ•˜์„ธ์š”!! ํ™”์ดํŒ…~

1๊ฐœ์˜ ๋‹ต๊ธ€