Async 선언시 Pending Promise 가 생성된다. new Promise 때랑 같다.
함수가 진행을 하다가 Await을 만날시 Async의 진행이 멈춘다.
Await 뒤에 있는 함수가 실행된다. !주의! 여기 함수는 PROMISE 를 리턴해야한다.
의문점: 그럼 지금 과제에서 아래 부분은 왜 실행되는건가
const getComment = await Comment.findById({
_id: _commentId,
postId: _postId,
});
해결: 사실 Comment.findById가...Promise를 리턴한다는 사실!?@#?! 몽구스 connect 할때도 Promise가 사용됬었는데...Promise 너는 도대체....
"Mongoose provides a default promise implementation using the global Promise object"
await is usually used to unwrap promises by passing a Promise as the expression
unwrap = [ pending to settled ]
passing as expression = [ expects an expression that evaluates to a Promise ]
프로미스가 resolved 된다면 data는 settled된 프로미스 오브젝을 받는다
다시 Async 함수가 진행된다.
어떤 방식으로 풀어나가든 마지막에는 resolved Promise로 감싸진 값이 리턴된다.
그래서 이런 재미난 일도 가능하다.
async function foo() {
return "bar";
}
const result = await foo();
//(70% 내생각) bar는 String bar 로 resolved된 Promise Object이다 사용할때는 자연스레 사용된다.