Node.js / 02 / Promise ๐Ÿฅถ

DOMADOยท2024๋…„ 7์›” 10์ผ
0

Node.js

๋ชฉ๋ก ๋ณด๊ธฐ
6/12
post-thumbnail

๐ŸŒน Promise

  • JS์—์„œ ์ œ๊ณตํ•˜๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ(์ฝœ๋ฐฑํ•จ์ˆ˜ ๋Œ€์‹ ์—) ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œ๊ณตํ•˜๋Š” object(๊ฐ์ฒด)
์ฝœ๋ฐฑํ•จ์ˆ˜ -> ์ฝœ๋ฐฑ์ง€์˜ฅ -> Promise ๋“ฑ์žฅ -> Promise ์ง€์˜ฅ -> async & await ๋“ฑ์žฅ 
                                                 -> Promise Chaining
                                                 -> Promise.all() ;
                                                 -> Promise.race() ;  


[โ“] ๋น„๋™๊ธฐ ํ†ต์‹  ํ•˜๋Š” ์ด์œ  : ๋ฌด๊ฑฐ์šด ์ผ์„ ํ•  ๋•Œ ( ํฐ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ)
                         ๋™๊ธฐํ†ต์‹ ์ด๋ผ๋ฉด, ์ฝ๋Š” ๋™์•ˆ ์•„๋ฌด ์ž‘์—…์„ ํ•˜์ง€ ๋ชป ํ•  ๊ฒƒ (์‚ฌ์šฉ์žํ™˜๊ฒฝ,๊ฒฝํ—˜ โ†“)

[โœจํ‚คํฌ์ธํŠธ]

โ‘  ์ƒํƒœ(state)์˜ ํ๋ฆ„

โ‘ก produer / consumer ์˜ ๊ฒฌํ•ด์— ๋”ฐ๋ฅธ ์ฐจ์ด์  ์ดํ•ด


1๏ธโƒฃ Promise์˜ ์ƒํƒœ

๐ŸŸ  ๋Œ€๊ธฐ(pending) : ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘ ...

๐ŸŸข ์ดํ–‰(fulfilled) : ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ ๊ฒฝ์šฐ !

๐Ÿ”ด ๊ฑฐ๋ถ€(rejected) : ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ !


โœ… (์ดํ–‰์‹œ) resolve(value) : ์„ฑ๊ณต์‹œ, ๊ฒฐ๊ณผ๊ฐ’ ๋ฐ˜ํ™˜

โœ… (์‹คํŒจ์‹œ) reject(error) : ์‹คํŒจ์‹œ, ์—๋Ÿฌ๊ฐ’ ๋ฐ˜ํ™˜


2๏ธโƒฃ Promise์˜ ์ž…์žฅ์ฐจ์ด

โ—ฝ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด์„œ ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” produer
โ—ฝ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” consumer


โœ… producer ํŒŒํŠธ (= Promise ์ƒ์„ฑ)


๐Ÿ”ต const promise = new Promise()
๐ŸŸก Promise ์ƒ์„ฑ์‹œ, ์—‘์‹œํํ„ฐ(executor) ํ•จ์ˆ˜ ์ฆ‰์‹œ ์ž๋™ ์‹คํ–‰
๐Ÿ”ต ์—‘์‹œํํ„ฐ(executor)๋Š” 2๊ฐœ์˜ ์ธ์ž (resolve, reject) ๊ฐ€์ง€๊ณ  ์žˆ์Œ


โญ ์ดˆ๊ธฐ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์‹œ, ์—‘์‹œํํ„ฐ(executor)๊ฐ€ ํ•œ ๋ฒˆ ์‹คํ–‰ ๋จ



โญ ์—‘์‹œํํ„ฐ(executor) : ํ”„๋กœ๋ฏธ์Šค์˜ ์ƒํƒœ๋ฅผ ๊ฒฐ์ • ์ง“๋Š” ํ•จ์ˆ˜
                     : ๐ŸŸข์„ฑ๊ณต์‹œ resolve(value) ๊ฐ’ ๋ฐ˜ํ™˜
                     : ๐Ÿ”ด์‹คํŒจ์‹œ reject(error) ๋ฐ˜ํ™˜
 
 
 
โญ ์—‘์‹œํํ„ฐ๋Š” ( resolve, reject ) 2๊ฐœ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ


โœจ Promise ๊ฐ์ฒด ์ƒ์„ฑ์‹œ, ์—‘์‹œํํ„ฐ(executor) ํ•จ์ˆ˜ ์ฆ‰์‹œ ์ž๋™ ์‹คํ–‰ ๋œ๋‹ค !

โœจ ์—‘์‹œํํ„ฐ(executor) ํ•จ์ˆ˜๋Š”, ( resolve, reject ) 2๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ–๋Š”๋‹ค !

๐ŸŸข resolve(value) : ์„ฑ๊ณต์‹œ, ๊ฐ€์ ธ์˜ฌ ๊ฐ’

๐Ÿ”ด reject(error) : ์‹คํŒจ์‹œ, ๊ฐ€์ ธ์˜ฌ ์—๋Ÿฌ๊ฐ’



โœ… consumer ํŒŒํŠธ
(= ์ƒ์„ฑ ๋œ Promise๋ฅผ ์ด์šฉํ•ด๋ณด์ž !)



โญ promise๊ฐ์ฒด.then() : Promise๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋์„ ๊ฒฝ์šฐ,
                   ๐ŸŸข๊ฒฐ๊ณผ๊ฐ’(resolve(๐ŸŸขvalue)์˜ ๐ŸŸขvalue ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.)



โญ promise๊ฐ์ฒด.catch() : Promise๊ฐ€ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ,
                    ๐Ÿ”ด์—๋Ÿฌ๊ฐ’(reject(๐Ÿ”ดerror)์˜ ๐Ÿ”ดerror ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.)



โญ promise๊ฐ์ฒด.finally() : ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ์‹คํŒจํ•˜๋”๋ผ๋„ ํ•ญ์ƒ ์‹คํ–‰ !






[ ๐Ÿšซ ์—๋Ÿฌ ํƒ๊ตฌ ] 

.catch ์—†์ด, promise ๋ถ€๋ถ„์—์„œ reject(error) ๋ฐœ์ƒ ์‹œ, ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฐœ์ƒ

Uncaught Error : ์žก์„ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ 


โœ”๏ธ Error Handling ๋˜ํ•œ, ์—ฐ๊ตฌํ•˜๊ณ  ๊นŠ๊ฒŒ ํŒŒ๋ด์•ผ ํ•  ๋“ฏ . . !!
(๋ผ๊ณ  ๋งํ•˜๋‹ˆ๊นŒ, ๋ฐ‘์— ๋”ฐ๋กœ ์•„์˜ˆ ๋‹ค๋ฃจ๋Š” ์ค‘..๐Ÿ˜Œ) 


โœ… Promise chaining

  • ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ์—ฐ์†์ ์œผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•

  • ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ(then, catch, finally)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์† ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

[ โ—โ— ] ํ”„๋กœ๋ฏธ์Šค ์ฒด์ด๋‹์€ ๊ฐ ๋ฉ”์„œ๋“œ(then, catch, finally)๊ฐ€
๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค ! . .


[๐Ÿšซ] ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ํ•˜์ž ! ..

getEgg ๋ถ€๋ถ„์—์„œ reject(error) ๋กœ ๋ณ€๊ฒฝ์‹œ, 
์—๋Ÿฌ ๋ฐœ์ƒ ํ›„, ์ฒด์ด๋‹ ์ง„ํ–‰์ด ๋ฉˆ์ถค 

-> ์—๋Ÿฌ ๋ฐœ์ƒ ๋ถ€๋ถ„ ๋ฐ”๋กœ ๋‹ค์Œ์—์„œ .catch ์ž‘์„ฑ ํ›„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ง„ํ–‰ํ•จ !

[ ๐Ÿ”ฉ ] ๋ณ‘๋ ฌ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค !

โœ”๏ธ Promise.all( [๋ฐฐ์—ด] ) ;

โœ”๏ธ Promise.race( [๋ฐฐ์—ด] ) ;

์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ• ๐Ÿค“
: https://velog.io/@supernova77/Node.js-02-async-await


[๐Ÿ“‹] ์ฐธ๊ณ  ( ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ )

https://velog.io/@supernova77/React.js-02-%ED%95%A8%EC%88%98%ED%98%95-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8

profile
โ–ช๏ธ ๊ฒ€์ • ํ…Œ๋งˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์๋‹ˆ๋‹ค.

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