async/await의 실행 순서

강인호·2022년 10월 24일
0

개인저장

목록 보기
46/87

then catch만 쓰다가 await의 실행순서를 마주치니 정말 머리가 하얘졌다..

아직 많이 모자란걸로 알고 배워야겠다.

참고영상 : 생활코딩 async&await

async function run(){

console.log('start');
var timr = await timer(1000);
console.log('time:'+time);
time = await timer(time+1000);
console.log('time:'+time);
console.log('end');
}

console.log('parent start');
run();
console.log('parent end')

위함수를 실행시키면 어떤 결과값이 나올까??

결과값은

parent start
start
parent end
time:1000
time:2000
end

이렇게 나온다.

그럼 다시 코드를 뜯어보면

async function run(){

console.log('start'); // 2-1번

아래부터는 비동기라 3번으로 넘어간 후 실행

var timr = await timer(1000);   4번
console.log('time:'+time);
time = await timer(time+1000);
console.log('time:'+time);
console.log('end');
}

console.log('parent start'); // 1번
run(); //2번
console.log('parent end') // 3번

await 아래의 영역은 전부 timer를 기다린 후에 처리가 되므로

콜스택의 관점에서 본다면 (개인 생각)

1번 호출 후 실행

2번 호출 후 실행

2-1의 console.log('start') 호출 후 실행

await절은 호출 후 Web API에 넘기고 2번 삭제

3번 호출 후 실행

태스크큐로 넘어간 await절 다시 콜스택으로 호출

1번째 타임콘솔 호출 후 실행

2번째 타이머 호출 후 Web API로 넘기고 2번째 타이머 삭제

태스크큐 -> 콜스택으로 다시 호출

2번째 타임콘솔 호출 후 실행

console.log('end') 호출 후 실행

의 순서라고 생각된다.

미리 공부하고 갔으면 좋았을걸 막상 코드의 실행결과를 직접 예측할줄은 몰랐었다.

사실상 실제로 사용해본적 없는 기능이라 더더욱 멘붕이 왔었던...

그 외에도 모자란 부분은 수없이 많았지만 저 await의 실행순서가 뭔가 제일 아쉬워서 제일 먼저 정리해보았다.

지금 다시 그 문제 보면 풀 수 있을것같은데..!

0개의 댓글