[JavaScript] ๐Ÿค™ promise

Mainยท2023๋…„ 5์›” 10์ผ
0

๐Ÿค™ promise ?

  • promise๋Š” ์–ด๋–ค ๊ณผ์ • ์ดํ›„ ์ฃผ์–ด์ง„ ๋™์ž‘์„ ์‹คํ–‰ํ•  ๊ฒƒ์„ ์•ฝ์†ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘์ฒฉ๋œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ง๊ด€์ ์ด๊ณ  ์—ฐ์†์ ์ธ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • callback hell์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

promise ์‚ฌ์šฉ

  • new Promise((resolve, reject)=>{}) ์˜ ํ˜•ํƒœ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์•ฝ์† ์ดํ–‰ ์„ฑ๊ณต์‹œ ์‹คํ–‰ ํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋Š” ์•ฝ์† ์ดํ–‰์— ์‹คํŒจ์‹œ ์‹คํ–‰ํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ก€์ ์œผ๋กœ resolve, reject๋กœ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • reject๊ฐ€ ์‹คํ–‰๋˜๋ฉด resolve๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • promise๋Š” 3๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    • pedding : ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์•„์ง resolve, reject ๋  ์ง€ ๊ฒฐ์ •๋˜์ง€ ์•Š์€ ์ดˆ๊ธฐ์ƒํƒœ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • fullfilled : ์ดํ–‰ ์ƒํƒœ๋กœ ์•ฝ์†์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
    • rejected : ๊ฑฐ๋ถ€ ์ƒํƒœ๋กœ ์•ฝ์†์ด ๊ฑฐ๋ถ€๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  • promise๋Š” ์•ฝ์†์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ดํ–‰๋˜๋ฉด fulifilled ์ƒํƒœ์˜ promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • then ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด resolve(์„ฑ๊ณต)์— ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • catch ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด reject(์‹คํŒจ) ๋ฌ์„๋•Œ ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • finally ๋ฉ”์„œ๋“œ๋Š” ์„ฑ๊ณต ์‹คํŒจ๋“  ์ƒ๊ด€ ์—†์ด ๊ฐ’์„ ๋ฐ›๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋˜ ๋‹ค๋ฅธ promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

promise ์˜ˆ์‹œ ์ฝ”๋“œ

const orderchicken = new Promise((resolve, reject)=>{
if(Math.random() < 0.5){
	setTimeout(()=>{
  	resolve('์ •์ƒ์ ์œผ๋กœ ์ฃผ๋ฌธ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');
  }, 1000)
}
else {
setTimeout(()=>{
  	reject('์ฃผ๋ฌธ๋Ÿ‰์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์ฃผ๋ฌธ์„ ๋ฐ›์ง€ ๋ชปํ•˜์˜€์Šต๋‹ˆ๋‹ค.');
  }, 1000)	
}
}).then(res=>{
	console.log(res);
console.log(typeof res)
}).catch(error => {
console.log(error);
}).finally(()=>{
	console.log("์ฃผ๋ฌธ ์ข…๋ฃŒ");
})

promise์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

1 ) promise all

  • promise์˜ ๋ฐฐ์—ด์„ ๋ฐ›์•„์„œ ๋™์‹œ์— ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋‘ ์„ฑ๊ณตํ•œ๋‹ค๋ฉด resolve๋œ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜ ๋ผ๋„ ์‹คํŒจํ•œ๋‹ค๋ฉด ๋ฐ”๋กœ catch๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

2 ) promise allSettled

  • ์ฃผ์–ด์ง„ proimse๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํŒจ์™€ ์ƒ๊ด€์—†์ด then์œผ๋กœ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3 ) promise any

  • ๊ฐ€์žฅ ๋จผ์ € ์„ฑ๊ณตํ•œ promise์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋‘ ์‹คํŒจ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. catch๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4 ) promise race

  • ์„ฑ๊ณต, ์‹คํŒจ ์ƒ๊ด€์—†์ด ์ฒซ ๊ฒฐ๊ณผ๋ฌผ์„ then ๋˜๋Š” catch๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
profile
ํ•จ๊ป˜ ๊ฐœ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž / ํ˜„์žฌ ๋…ธ์…˜์œผ๋กœ ์ด๋™ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

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