[๐ŸŒณjavascript] Promise

h-a-n-aยท2023๋…„ 3์›” 15์ผ
1

๐ŸŒณjavascript

๋ชฉ๋ก ๋ณด๊ธฐ
15/17

Promise

์ฝœ๋ฐฑํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์ฃผ๋Š”๋ฐ, ์ฝ”๋“œ๋„ ํ›จ์”ฌ ๋ณด๊ธฐ ์ข‹๊ณ , ๊ธฐ๋Šฅ๋„ ์ข€ ๋” ์ œ๊ณต์ด ๋˜๋Š” ๋…€์„. ์ผ๋‹จ ๋งŒ๋“œ๋Š” ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

const ํ”„๋กœ๋ฏธ์Šค = new Promise()

์ด๋Ÿฌ๋ฉด ํ”„๋กœ๋ฏธ์Šค ์ƒ์„ฑ!ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ƒˆ๋กœ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ ๋‚˜๋ฉด ์ด์ œ ๊ทธ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ .then์ด๋ผ๊ณ  ์“ฐ๊ณ  () ์•ˆ์— ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

ํ”„๋กœ๋ฏธ์Šค.then()

๋งŒ์•ฝ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ์—๋Š” .catch๋ผ๊ณ  ์“ฐ๊ณ  () ์•ˆ์— ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
์ด์ „์— ๋ดค๋˜ ์ฝœ๋ฐฑ์€ 1๋ฒˆ, 2๋ฒˆ ์ด๋ ‡๊ฒŒ ์ˆœ์„œ๋งŒ ๋ณด์žฅํ•ด์ค„ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ํ”„๋กœ๋ฏธ์Šค๋Š” ์ˆœ์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ์— ์‹คํ–‰๋  ๊ฒƒ๊นŒ์ง€ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ํ˜๋ช…์ ์ธ ์‚ฌ๊ฑด์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (์‹ฌ์ง€์–ด ์„ฑ๊ณต/์‹คํŒจ์™€ ๊ด€๊ณ„์—†์ด ์‹คํ–‰๋˜๋Š” finally๋„ ์žˆ์Œ)

ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์„ฑ๊ณต/์‹คํŒจํ•˜๋Š” ๊ฒƒ์˜ ํŒ์ •์—ฌ๋ถ€๋Š” new Promise()์•ˆ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

const ํ”„๋กœ๋ฏธ์Šค = new Promise(function(resolve,reject){
  const ์–ด๋ ค์šด์—ฐ์‚ฐ=1+1
  ์„ฑ๊ณต() // ๋ฌด์กฐ๊ฑด ์„ฑ๊ณตํ•˜๊ฒŒ ๋งŒ๋“ฆ 
})

๋˜ํ•œ, ํ”„๋กœ๋ฏธ์Šค๋Š” ์ฝœ๋ฐฑ๊ณผ ๋‹ฌ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ’์œผ๋กœ ๋ฐ›์•„์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ ๊ทธ ์ž์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ๋ฐ›๊ธฐ์—, ์—ฐ์†์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ์—์„œ๋Š” callback๋ณด๋‹ค ๊ฐ€๋…์„ฑ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

const ํ”„๋กœ๋ฏธ์Šค = new Promise(function(resolve,reject){
  const ์–ด๋ ค์šด์—ฐ์‚ฐ=1+1
  ์„ฑ๊ณต(์–ด๋ ค์šด์—ฐ์‚ฐ)
})

ํ”„๋กœ๋ฏธ์Šค
  .then(function(๊ฒฐ๊ณผ){console.log(๊ฒฐ๊ณผ)}) // ์ฝ˜์†”์— 2๊ฐ€ ์ฐํž˜
  .catch(function(){console.log('์‹คํŒจ')})

์ฃผ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
์ •ํ•ด์ง„ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜์„œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์„ฑ๊ณต์ด๋‚˜ ์‹คํŒจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค

Pending

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

Fulfilled

์ดํ–‰: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€ ์ƒํƒœ

Rejected

์‹คํŒจ: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ

์—ฐ์Šต๋ฌธ์ œ

const greeting = new Promise(function (res, rej) {
  $.get("https://hello.txt").done(function (๊ฒฐ๊ณผ) {
    res(๊ฒฐ๊ณผ);
  });
});
greeting
  .then(function (๊ฒฐ๊ณผ) {
    const ํ”„๋กœ๋ฏธ์Šค3 = new Promise(function (res, rej) {
      $.get("https://hello2.txt").done(function (๊ฒฐ๊ณผ2) {
        res(๊ฒฐ๊ณผ2);
      });
    });
    return ํ”„๋กœ๋ฏธ์Šค3;
  })
  .then((๊ฒฐ๊ณผ2) => {
    console.log(๊ฒฐ๊ณผ2);
  });

ajax๋ฅผ ์ด์šฉํ•ด ์ธ์‚ฟ๋ง์„ ์ถœ๋ ฅํ•˜๋Š” ์—ฐ์Šต๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.
๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ๊ฑฐ๋Š” return์„ ์–ด๋””์„œ ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€ ์˜€๋‹ค. ํ•จ์ˆ˜๊ฐ€ ์›Œ๋‚™ ๊ฒน์ณ์žˆ์œผ๋‹ˆ ๋ณด๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ๊ฒฐ๋ก ์ ์œผ๋กœ ๋‚ด๊ฐ€ return ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ํ”„๋กœ๋ฏธ์Šค3๋Š” Promise๋กœ ๋งŒ๋“  ๊ฑฐ๊ฐ€ ๋‹ค ๋๋‚œ ๋‹ค์Œ์— ๋ฆฌํ„ดํ•ด์•ผ ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  .then((๊ฒฐ๊ณผ2)์„ ํ”„๋กœ๋ฏธ์Šค3.then ์ด๋ ‡๊ฒŒ ์จ์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. const ํ”„๋กœ๋ฏธ์Šค3๋Š” ๋ธ”๋ก๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ {}์•ˆ์—์„œ๋ฐ–์— ๋ชป ์ฐพ๋Š”๋‹ค. ํ”„๋กœ๋ฏธ์Šค3์œผ๋กœ ์ฐพ์„ ๊ฒŒ ์•„๋‹ˆ๋ผ ์•ž์˜ Promise ์ž์ฒด๋กœ .then()์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ–ˆ๋‹ค.


  • ์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ
    Promise์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค. resolve,reject๋ฅผ ์ธ์ž๋กœ ๊ฐ–๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์จ์„œ ์„ฑ๊ณต/์‹คํŒจ ํŒ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์„ฑ๊ณต/์‹คํŒจ์— ๋งž์ถฐ then/catch๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ๋“ค ์ค‘ ๊ถ๊ธˆํ•˜๊ฑฐ๋‚˜ ๋” ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ
    ์ž ์ด์ œ async/await ๊ณต๋ถ€ํ•˜๋Ÿฌ ๊ฐ€์•ผ์ง€
  • ์˜ค๋Š˜์˜ ์†Œ๊ฐ
    ์ฝœ๋ฐฑ์ง€์˜ฅ๋ณด๋‹ค๋Š” ๋‚˜์€ ๊ฒƒ ๊ฐ™์€๋ฐ ์ต์ˆ™ํ•ด์ง€๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.
profile
ํ•˜๋ฃจํ•˜๋ฃจ๊ฐ€ ์—ฐ์Šต์ด๋‹ˆ ๋‚ด์ผ์€ ๋” ๊ฐ•ํ•ด์งˆ ๊ฒ๋‹ˆ๋‹ค

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