๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

[ JavaScript / Promise ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Promise์— ๋Œ€ํ•˜์—ฌ

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

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

 

 

 

 

๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ž€?

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

 

 

 

 

 

Promise 

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

 

 

 

 

 

 

Promise ์ƒํƒœ

ํ”„๋กœ๋ฏธ์Šค ์ƒํƒœ ๋œป ์ƒํƒœ ๋ณ€๊ฒฝ ์กฐ๊ฑด
pending(๋Œ€๊ธฐ) ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์•„์ง ์ˆ˜ํ–‰๋˜์ง€ ์•Š์€ ์ดˆ๊ธฐ ์ƒํƒœ. ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์งํ›„ ์ดˆ๊ธฐ ์ƒํƒœ.
fulfilled(์ดํ–‰) ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋œ ์ƒํƒœ.(์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ) resolve ํ•จ์ˆ˜ ํ˜ธ์ถœ
rejected(๊ฑฐ๋ถ€) ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•œ ์ƒํƒœ. reject ํ•จ์ˆ˜ ํ˜ธ์ถœ

 

MDN - Promise

 

 

 

 

Promise ์˜ˆ์ œ ์ฝ”๋“œ

// ํ”„๋กœ๋ฏธ์Šค ์ƒ์„ฑ
const myPromise = new Promise((resolve, reject) => {
	// ์ˆ˜ํ–‰ํ•œ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ์—๋Š” resolve(...)๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์‹คํŒจํ•œ ๊ฒฝ์šฐ reject(...)๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
	if(success) {
		resolve('result');
    } else {
    	reject('์‹คํŒจ ์ด์œ ');
    }
});

 

 

 

 

 

Promise ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ

- Promise.prototype.catch() : ๊ฑฐ๋ถ€(rejected) ์ฒ˜๋ฆฌ ์ฝœ๋ฐฑ์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์œผ๋ฉฐ ์–ธ์ œ๋‚˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

- Promise.prototype.then() : ์ดํ–‰(fulfilled)๊ณผ ๊ฑฐ๋ถ€(rejected) ์ฒ˜๋ฆฌ ์ฝœ๋ฐฑ์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๊ณ , ์ƒํƒœ์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ(์„ฑ๊ณต) ๋˜๋Š” ๋‘ ๋ฒˆ์งธ(์‹คํŒจ) ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ๋‚˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  

- Promise.prototype.finally() : ํ”„๋กœ๋ฏธ์Šค์˜ ํ–‰(fulfilled)๊ณผ ๊ฑฐ๋ถ€(rejected) ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋œ๋‹ค. ํ”„๋กœ๋ฏธ์Šค์˜ ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๊ณตํ†ต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ฒ˜๋ฆฌ๊ฐ€ ์žˆ์„๋•Œ ์œ ์šฉํ•˜๋ฉฐ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ธ์ œ๋‚˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  

 

 

 

 


 

๐ŸŒธ ์ถœ์ฒ˜ ๐ŸŒธ

 

Promise - MDN

Using Promise - MDN

Asynchronous JavaScript - MDN