동기적이라 하면 시작 시점과 완료 시점이 같은 상황이다.
(blocking 하나의 작업이 끝날때 까지 이어지는 작업을 막는것) 예를 들어
음식을 주문할때 손님1이랑 손님2가 주문할때 손님1의 메뉴가 나와야 손님2가 주문을 할 수 있다.
상당히 비효율적이다. 효율적으로 계속 주문을 받을 수 있으면 아주 좋겠다. 그래서 Node.js를 비동기적으로 작동하는 런타임으로 개발하게 된다.
- 백그라운드 실행, 로딩 창 등의 작업
- 인터넷에서 서버로 요청을 보내고, 응답을 기다리는 작업
- 큰 용량의 파일을 로딩하는 작업
특히 비동기적이여야 할 상황들이다.
먼저 callback
함수를 알아야 한다. 다른 함수의 전달인자로 넘겨주는 함수이다.
응답이 비동기적으로 이루어지고 이벤트가 생기면 콜백한다.
예를 들면
1.주문이 들어온다. // 응답이 비동기적으로 이루어짐
2.카페라떼가 완성되면 직원이 손님을 부른다. // 완성되면 (이벤트)callback
손님을 부른다.
3.카페라떼를 손님에게 전달한다.
알아야할 3가지
- Promise는 클래스이기 때문에 new Promise()로 인스턴스가 만들어진다.
- resolve()로 실행하고 에러가 있으면 reject()를 쓸 수 있다.
- .then()을 쓸 수 있다.
노드 버전이 높으면 쓸 수 있다. ES8..?
함수 앞에 async 키워드를 사용하고 async 함수 내에서 await 키워드를 사용하면 된다.
await 키워드가 작성된 코드가 동작하고 나서야 다음 순서의 코드가 동작한다!
이해가 잘 안된다면 코드를 많이 써보자!