안녕하세요. await async 강의 7분31초 부분에서 질문입니다. 7분 31초 부분에서 질문있습니다.
392
7 câu hỏi đã được viết
안녕하세요.
const p = add(1,2);
console.log(p);
여기서 Promise { <pending> } 이 출력되는데요.
add 함수 내부에서 await setTimeout 호출되면 add 함수는 더 진행되지 않는다고 하셨습니다. 그럼 return 도 못한건데 왜 p 에 값이 Promise 가 들어왔는지 궁금합니다..
Câu trả lời 2
2
async 함수는 Promise 객체를 반환해서 동시적으로 실행되도록 합니다.
그러니까, const p = add(1, 2)가 호출되는 순간, 이미 p에는 Promise 객체가 반환된 것입니다.
그리고, add() 함수에서 setTimeout() 함수를 await 하면서,
context switching 일어나고,
console.log(p) 가 pending 상태의 Promise 객체임을 출력합니다.
이것이 자바스크립트의 동시 실행 방식입니다.
쓰레드와 같이 OS 수준에서 병렬적으로 실행되는 것과 다릅니다.
쓰레드가 생성되면, OS 수준에서 core를 나눠서 병렬적으로 실행됩니다.
하지만, 자바스크립트의 동시 실행은
코드 실행이 멈추고 event loop에 대기 상태가 되면
context switching이 되고 task queue에서 다음 작업을 이어서 실행합니다.
그러니까,
async 함수 add()가 호출되면서 Promise 객체가 반환되고 task queue에 넣어집니다.
add() 함수에서 async setTimeout() 함수가 호출되면서
Promise 객체가 반환되고 task queue에 넣어집니다.
setTimeout() 함수에서 시스템에게 1초 timeout을 등록하고 종료합니다.
event loop에서는 다음 task를 실행합니다.
따라서, console.log(p)가 출력됩니다.
console.log(p)가 출력되고 나면, event loop에서 다음 task를 실행합니다.
다음 task는 await로 Promise가 완료될 때까지 기다립니다.
1초 timeout이 지나면,
시스템은 timeout event가 발생하고,
timeout event에 의해서 Promise 객체가 완료됩니다.
그러면, event loop에서 다음 task가 실행되고,
이때, console.log(result) 등이 출력됩니다.
JavaScript engine이 어떻게 event loop와 task queue를 사용해서
프로그램을 동시적으로 실행하는 지를 상상해 보시면 좋을 듯 합니다.
6장 ORM 에 관하여 질문
0
5
1
안녕하세요 한번 더 문의드립니다.
0
14
1
git 초기설정하고 Next Js 설치하는게 너무 어렵습니다.
0
8
1
81강 실습 자료 없음
0
9
2
선생님 공유해주신 핸드북에 링크가 몇개 잘못되었어요
0
19
2
62강 실습자료가 잘못되었습니다.
0
17
1
코드 자료는 없는걸까요?
0
37
3
강의 목표
0
33
1
강의 노트 위주로 학습
0
36
1
쿠키 생성 관련
0
64
3
프로덕션 부분 사용 불가
0
58
2
JWT auth error invalid token
0
59
2
경력기술서는 어떤 방향이 좋을까요?
0
52
2
in-app purchasing 버튼의 install 버튼이 비활성화되어있을때 어떻게 해결해야하나요 ?
0
46
2
마감 인 경우.
0
55
1
5장부터는 미션 상세 내용이 없는데 어떻게 작성해야되나요?
0
50
1
MSA 와 BFF 아키텍처 설명 부분에 대한 문의
0
52
1
유니티 제외 설치한 프로그램들 및 파일 삭제 방법
0
44
1
깃허브에서 콤피유아이 매니저 설치하는게 안됩니다.
0
61
2
eslint.config.js 설정 질문입니다.
0
63
2
7강 흐름 제어 아키택쳐 코드 순서
1
53
1
수업자료 어디서 찾아볼 수 있나요?
0
47
2
함수 강의의 정답.. 어떤가요?
0
40
1
Promise 객체 강의 7분 27초 부분 질문입니다.
1
510
2

