async/await는 ES8에서 도입된 문법으로 promise를 더욱 쉽게 사용할 수 있도록 해준다.
promise의 경우 chaining을 통해 .then().then().then() 이렇게 각각의 시점에서 fullfilled 되었을 때 호출할 resolve를 체인처럼 연달아 지정해줄 수 있다.
하지만 이렇게 여러개의 promise를 연달아 지정해주면 가독성이 나빠지고 프로그램의 흐름을 추적하기 어렵다.
이를 위해서 async, await 구문을 추가하였다.
await 문을 사용하면, 해당 promise가 fullfilled or rejected 될 때 까지 기다렸다가 다음 코드를 실행하는 방식으로 흐름을 어느정도 제어할 수 있게 된다.
현재 사용하는 바로는 promise chaining이 한 두개 정도면 기존 방식을 사용해도 문제는 없어보이고(db query 후 결과 전달)
여러가지 작업을 많이 하는 경우에는 (deep class) 사용해볼만하다고 생각한다.
promise 사용 방법: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Promises
promise vs async/await: https://ko.javascript.info/async-await
async/await: https://learnjs.vlpt.us/async/02-async-await.html
promise와 async/await 차이점: https://velog.io/@pilyeooong/Promise%EC%99%80-asyncawait-%EC%B0%A8%EC%9D%B4%EC%A0%90
any: 여러 promise 중에 하나라도 fulfilled 되면 resolve를 호출한다.
race: 처음으로 실행완료된 promise의 결과에 따라 resolve or reject를 호출한다.
any의 경우 첫번째 promise가 실패해도, 두번째 promise가 fulfilled 되면 resolve한다.
하지만 race의 경우 첫번째 promise가 rejected 되는 순간 전체가 reject 된다.