

undefined 만 출력됐다는 것은 await 빵만들기() 등에서 아무런 데이터를 가져오지 못했다는 것이다.
하지만 우리는 호출스택과 이벤트루프, 큐들을 배우면서 왜 잘못됐는지 알 수 있게 됐다.
위의 코드는 그림으로 표현하면 양이 길어질거 같으니 조금 줄여보자.

웹툰이라는 변수를 출력하면 위의 햄버거 제작 코드와 똑같이 undefined 다.
어떤 식으로 위의 코드가 실행되는지 그림으로 살펴보자.






우리가 이전 포스트에서 await, async가 어떻게 마이크로태스크큐에 담기는지 얘기하지 않았는데,
이전에 이미 공부했지만 위의 코드의 const 웹툰 = await 랜덤웹툰();에서 await 을 달고 실행할 수 있는 함수는 Promise를 반환해야한다. 그래서 반환값이 return new Promise 이거나, 함수가 async function 이어야한다.
그래서 위의 코드에서 랜덤웹툰(); 은 프로미스를 반환하고 실행할 때 await을 달았기때문에 이 프로미스의 상태가 rejected 이거나 fulfilled 로 변하는 순간에 해당 await 랜덤웹툰() 을 담고있는 함수를 마이크로태스크큐에 적재한다.
.
즉, await 랜덤웹툰을 담고 있는 웹툰가져오기 함수를 마이크로태스크큐에 적재한다.
그리고 5번에서 undefined를 반환하며 fulfilled 로 프로미스 상태가 바뀌었고, 웹툰가져오기가 마이크로태스크큐에 적재되며, 웹툰가져오기 아래의 console.log("외모지상주의")를 실행하게 된다.
내가 아는 방법은 2가지인데 이외에도 방법이 있을 때 알려주시면 매우 감사합니다 (_ _)
다시 맨 위의 햄버거 만드는 코드를 고쳐보자.

맨 위의 코드와 비교해서 빵만들기 함수와 패티만들기 함수 2개가 바뀐 것을 알 수 있다. 양상추만들기는 그대로 두었다.
내가 아는 방법 2가지 중 하나를 빵만들기 함수에 적용했고 나머지 하나를 패티만들기에 적용했다.
빵만들기와 패티만들기가 어떻게 제대로 된 값을 반환했는지는 이전까지 배운 모든 것을 조합한다면 알 수 있을 것 같다.