Promise๋ž€?

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

Promise๋ฅผ ํ˜ธ์ถœํ•œ ์ด์œ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋Š” 3๊ฐ€์ง€

  • then: reslove()๋ฅผ ํ†ตํ•œ ๋ฆฌํ„ด ๊ฐ’
  • catch: reject()๋ฅผ ํ†ตํ•œ ๋ฆฌํ„ด ๊ฐ’
  • finally: ์‹คํ–‰ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์ดํ›„ ์ด๋ฒคํŠธ ์‹คํ–‰

๊ฐ€์žฅ ํฐ ์žฅ์ ์œผ๋กœ๋Š”

  • ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€
  • ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ž‘์—…์ด ์ค„์–ด๋“ฌ
  • throw๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด error ์ƒํ™ฉ์„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋‚ด ์—๋Ÿฌ ํ•ธ๋“ค๋ง์ด ํ•œ๊ฒฐ ํŽธํ•ด์ง

ํ•œ๋ฒˆ์— ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ๋˜๋Š” ๊ฒฝ์šฐ

  • Promise.all
    • ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๋ฐฐ์—ด ๋“ฑ์˜ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „๋‹ฌ๋ฐ›์€ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolveํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ „๋‹ฌ๋ฐ›์€ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋•Œ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋ชจ๋“  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ resolve ๋˜๋Š” reject ํ•œ๋‹ค.
Promise.all([
  new Promise((resolve) => setTimeout(() => resolve(1), 3000)), // 1
  new Promise((resolve) => setTimeout(() => resolve(2), 2000)), // 2
  new Promise((resolve) => setTimeout(() => resolve(3), 1000)), // 3
])
  .then(console.log) // [ 1, 2, 3 ]
  .catch(console.log);

์ฐธ๊ณ ๋งํฌ

Promise - JavaScript | MDN

promise, async/await

ํ”„๋ผ๋ฏธ์Šค