다른 함수가 실행을 마친 뒤, 그다음에 실행 하는 함수.
자바스크립트에서 함수는 객체이다. 따라서 함수는 함수를 인자로 받고
다른 함수를 통해 반환될 수 있다. 이때, 인자로 대입되는 함수를 콜백함수라고 한다.
비동기처리: 요청한 응답이 돌아오기 전이라도 다음 요청을 처리하는것
동기처리: 먼저 요청한 응답이 돌아온 후 다음 요청을 처리하는것
자바스크립트는 함수에 따라 동기적 실행을 하기도 하고, 비동기적 실행을 하기도 한다.
자바스크립트는 비동기 실행을 할때, 이벤트의 값이 반환될 때 까지 기다리지 않고 다음의 이벤트를 계속 실행한다.
따라서 API요청과 같은 비동기적인 함수를 실행할 경우 특별한 처리를 해주지 않으면
함수를 원하는 대로 실행하기 어렵다.
비동기 처리를 위해 콜백함수를 이용하는 방법
비동기 처리를 할 수 있지만, 코드를 계속해서 중첩하며 작성하게 된다.
예외, 에러처리가 어렵고, 복잡도가 증가하며, 콜백지옥이라는 현상이 나타나게 된다.
어떤 시점에 결과를 제공하겠다는 약속(Promise)를 반환하는것
async와 await을 이용해 비동기 처리를 하는 방식으로 코드의 가독성을 높여줄 수 있다.
1| app.post('/tokens/phone', async (req, res) => {
2| const user_phone = req.body.phone
3| const result = await Token.findOne({ phone: user_phone })
4| res.send(result)
- 비동기 처리를 하기 위해 async를 사용해준다.
- 데이터로 받은 req.body.phone을 user_phone에 할당해준다.
- Token DB에서 user_phone 자료를 찾아준다.(비동기로 진행되므로 await처리를 해준다)
- result가 처리될 때까지 기다려준 후, res.send(result) 결과가 응답으로 전송된다.