Hello, Android!

async / await 본문

Node

async / await

lwndnjs93 2021. 2. 1. 22:45

자바스크립트에서 정말 많이 사용되는 콜백 함수

콜백 함수가 끝없이 중첩되는 콜백 지옥을 해결해기 위해

promise를 사용했다

콜백 함수를 그대로 사용하였을때
promise를 사용했을때

promise를 사용한 결과 그냥 콜백 함수를 사용하였을때 보다는 훨씬 줄어들었고

한결 정렬된 모습으로 변했다

하지만 이것마저 장황하고, 일반적인 탑다운 형식보다는 읽기 힘든 모습이다

그래서 우리는 ES2017에서 추가되었으며, 노드 7.6 버전부터 지원하는 async / await을 사용해야 한다

특히 노드처럼 비동기 위주의 프로그래밍을 할때 비동기를 유지하면서 동기적인 모습을 적용할수 있다

 

위의 두 예제는 파일을 작성한 뒤 해당 파일을 다시 읽어 콘솔에 출력하기 위해서 

첫번째는 콜백을 그대로 사용했을때 두번째는 promise를 사용하여 간결하게 만들었다

그리고 이번에는 promise를 다시 async / await으로 바꾸어 보았다

그냥 봤을때는 async, await이 중간에 추가되었을뿐 일반적인 함수와 다를것 없는 모습이라

과연 정말 의도한 그대로 비동기로 움직일까? 하는 생각이 들 정도이다!!

 

asyc await의 사용법은 함수 앞에 async를 붙이고 

promise함수 앞에는 await을 붙여서 비동기 상태를 유지한다

그래서 5번 라인 await fs.writeFile("./Hello, World!!""Hello, Ryan!!") 이 resolve 될때까지 기다린 뒤

다음 작업으로 넘어가게 된다

 

그리고 promise를 사용할때는 .catch() 에서 에러를 처리했지만

대부분의 언어에서 예외처리에 사용하는 try catch문을 그대로 사용할수 있다

 

콜백을 거쳐 promise, async / await 정말 놀라울만큼 변하였다

특히 코드의 가독성, 원활한 에러처리를 위해서는 async / await을 적극적으로 사용해야 될것같다

 

'Node' 카테고리의 다른 글

이벤트 처리  (0) 2021.02.02
버퍼와 스트림  (0) 2021.02.02
Promise  (0) 2021.02.01
파일 입출력  (0) 2021.01.31
자식 프로세스  (0) 2021.01.30