제가 비동기랑 동기의 개념을 잡고 블로킹 논블록킹 개념을 잡은뒤 궁금한 부분이 있어서 질문드립니다.
function getNumber(preNumber){
let pr = new Promise((resolve, reject) => {
if(preNumber > 1000)
resolve(preNumber + 1000);
else
reject("no number");
});
return pr;
}
async function logger() {
try{
console.log("로거 안");
let number = await getNumber(1001);
let number2 = await getNumber(2001);
console.log("number : " + number);
console.log("number2 : " + number2);
console.log("number + number2 = " + (number + number2));
}catch(err){
console.error(err);
}
}
logger();
console.log("로거 호출 후");
웨 소스에서 logger함수는 await가 실행될때 바로 리턴을 하므로 논블로킹이라고 부를수 있다고 봅니다. 그러면 logger함수 안에 await구문 자체는 블로킹 코드로 생각됩니다.
그 이유는 await구문이 실행되면 getNumber(1001) 함수가 바로 리턴되지 않고 완료 될 때 까지 기다렸다가 다음 줄인 getNumber(2002);가 실행이 되기 때문에 logger함수 안에 await구문은 블로킹이라고 생각되는데 이게 맞는건가요?
그리고 만약 블로킹이 맞다면 await구문 자체가 비동기로 실행되어 그 이후 실행되는 로직은 이벤트 루프에서 따로 실행되는 것으로 알고 있는데 그러면 await구문은 "비동기 블로킹"이라고 봐도 되는 것일까요?
이 두가지가 맞는 것인지 궁금합니다.