[JavaScript] Promise와 async 그리고 await

2022. 4. 10. 17:33γ†κ°œλ… 정리 μž‘μ—…μ‹€/JavaScript

728x90
λ°˜μ‘ν˜•

 

πŸš€ κ°œμš”

`Promise`λŠ” 이전 μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ μ—°κΈ° μ‹œν‚€κ±°λ‚˜, μž‘μ—… μ‹€νŒ¨λ₯Ό λŒ€μ‘ ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” `JavaScript`의 κΈ°λŠ₯인 κ²ƒμ΄μ—μš”. λ˜ν•œ μ–΄λ–€ μž‘μ—…μ˜ 쀑간 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 객체인 κ²ƒμ΄μ—μš”. 즉, λ―Έλž˜μ— μ–΄λ–€ μ’…λ₯˜μ˜ κ²°κ³Όκ°€ λ°˜ν™˜λ¨μ„ `약속(Promise)`ν•΄μ£ΌλŠ” 객체라고 보면 λ˜λŠ” κ²ƒμ΄μ—μš”. 

 

 

`JavaScript`λŠ” λΉ„λ™κΈ°λ‘œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ Methodκ°€ 싀행쀑이더라도 λ‹€μŒ λ‚΄μš©μ„ μ‹€ν–‰ν•΄ λ²„λ¦¬λŠ” λ¬Έμ œκ°€ μžˆλŠ” κ²ƒμ΄μ—μš”.

이 λ•Œ, `async`λŠ” `JavaScript`의 ν•¨μˆ˜λ‘œ 항상 `Promise`λ₯Ό λ°˜ν™˜ν•˜κ²Œ ν•΄ μ£ΌλŠ” κ²ƒμ΄μ—μš”. `Promise`κ°€ μ•„λ‹Œ 값을 λ°˜ν™˜ν•˜λ”λΌλ„ `Resolved Promise(이행 μƒνƒœμ˜ ν”„λΌλ―ΈμŠ€)`둜 값을 감싸 μ΄ν–‰λœ `Promise`κ°€ λ°˜ν™˜λ˜λ„λ‘ ν•΄ μ£ΌλŠ” 친ꡬ인 κ²ƒμ΄μ—μš”.

JAVA와 λΉ„κ΅ν•˜λ©΄ `Optional<>`κ³Ό 많이 λΉ„μŠ·ν•΄ λ³΄μ΄λŠ” κ²ƒμ΄μ—μš”.

 

λ°˜μ‘ν˜•

 

`await`은 μ—­μ‹œ `JavaScript`의 κΈ°λŠ₯으둜 `JavaScript`λŠ” `await`을 λ§Œλ‚˜κ²Œ 되면 `Promise` 처리(Settled)κ°€ μ™„λ£Œ 될 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜κ²Œ 되고, ν•΄λ‹Ή κ²°κ³ΌλŠ” κ·Έ 뒀에 λ°˜ν™˜ν•˜κ²Œ ν•΄ μ£ΌλŠ” 친ꡬ인 κ²ƒμ΄μ—μš”.

참고둜 `await`λŠ” `async`λ₯Ό μ‚¬μš©ν•˜λŠ” λ°μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ΄μ—μš”.

`await`은 κΈ°λ‹€λ¦¬λ‹€λΌλŠ” λœ»μ„ 가진 μ˜λ‹¨μ–΄λ‘œ `Promise`κ°€ 처리될 λ•ŒκΉŒμ§€ ν•¨μˆ˜ 싀행을 κΈ°λ‹€λ¦¬κ²Œ λ§Œλ“œλŠ” 친ꡬ인 κ²ƒμ΄μ—μš”.

`Promise`κ°€ 처리되면 κ·Έ 결과와 ν•¨κ»˜ 싀행이 λ‹€μ‹œ μ‹œμž‘λ˜κ²Œ λ˜λŠ” κ²ƒμ΄λžλ‹ˆλ‹€.

 

 

`Promise`κ°€ 처리되길 κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ Engieen은 λ‹€λ₯Έ μž‘μ—…(λ‹€λ₯Έ Script μ‹€ν–‰, Event 처리)등을 ν•  수 있기 λ•Œλ¬Έμ— `CPU`와 같은 μžμ› λ‚­λΉ„λ₯Ό μ΅œμ†Œν™” ν•  수 μžˆλŠ” κ²ƒμ΄μ—μš”.

`await`은 `promise.then`보닀 가독성이 λ†’κ³ , `result`λ₯Ό 얻을 수 μžˆλ„λ‘ ν•΄ μ£ΌλŠ” λ¬Έλ²•μ΄λžλ‹ˆλ‹€.

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•

'κ°œλ… 정리 μž‘μ—…μ‹€ > JavaScript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JavaScript] κΈ°λ³Έ 문법  (0) 2022.04.07
[JavaScript] lodash  (0) 2022.03.16
[JavaScript&jQuery] 기초 κ°œλ… 정리  (0) 2022.03.06