[TIL] Promise, Async/await
0312 TIL
Created By: 성희 배 Last Edited: Mar 12, 2020 11:29 PM
- 데이터를 받아올 때, 두 개를 한번에 받아오다 보니 동기화가 안돼서 한개만 받아와지는 경우가 있었다.
기존 코드
Restriction.countDocuments({state : 0}, (err, cnt)=>{ ret.prohibitions = cnt }).then(Restriction.countDocuments({state : 1}, (err, cnt)=>{ ret.restrictions = cnt })).then(()=> res.send(ret))
- .then()으로 감싸다 보니 한 개만 보내지고.. 난리
변경 코드 ```javascript async function fetch(){ const prohibitions = await Restriction.countDocuments({state : 0}) const restrictions = await Restriction.countDocuments({state : 1})
res.send({
restrictions : restrictions,
prohibitions : prohibitions
})
} ``` - 해결 방법이 없을까 검색을 해보니 async/await이 있어 사용해 봤다! - 코드도 훨씬 가시적이고, 데이터도 너무 잘 보내짐 👍
Async/await 과 Promise
Promise?
- .then().then()…
- 함수 호출 (resolve라고 하나봄) 이후 then()에 걸린 함수 실행
Async/await
- async 함수(), await 함수()
- await은 async가 resolve 된 이후 실행
그래서 Promise보다 Async가 나은 이유?
- 동기적 코드 흐름으로 개발이 가능
- 코드가 간결해지고, 가독성이 높아진다
- 응답데이터 (err, data, res 등)를 없앨 수 있음
- Promise 사용 시 콜백 내는 동기화 가능하지만, 밖의 함수는 동기화 불가
- 검색 해보니 Promise.all을 사용하면 여러개를 기다릴 수 있었다..ㅎㅎㅎ! 검색 부족이었던걸로..