inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hướng dẫn đầy đủ về lập trình không đồng bộ JavaScript - Promise, chờ đợi, không đồng bộ

Về từ khóa await-async

안녕하세요. await async 강의 7분31초 부분에서 질문입니다. 7분 31초 부분에서 질문있습니다.

365

gibbs

7 câu hỏi đã được viết

0

 안녕하세요.

 

const p = add(1,2);

console.log(p);

 

여기서 Promise { <pending> } 이 출력되는데요.

add 함수 내부에서 await setTimeout 호출되면 add 함수는 더 진행되지 않는다고 하셨습니다. 그럼 return 도 못한건데 왜 p 에 값이 Promise 가 들어왔는지 궁금합니다..

javascript node.js async-await promise

Câu trả lời 2

2

drajin

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를 사용해서

프로그램을 동시적으로 실행하는 지를 상상해 보시면 좋을 듯 합니다.

 

0

gibbs

네. 이해했습니다. 감사합니다.

프론트엔드 학습 수준 문의

0

22

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

38

2

최근 코테, 과제 테스트 트렌드

0

52

2

lucide react 아이콘 설치

0

35

2

17강 zustand store 서버에서 생성

1

30

1

문의관련 문의

0

36

2

next.js 를 2대이상 실행하는 경우 제공하는 cache 기능들은 어떻게 되나요?

0

46

2

76. 전문성 더하기: 놓치면 아쉬운 관련 기술들 수업 자료가 없어요.

0

41

2

fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다

0

34

1

ai 도구 질문

0

28

1

저는 왜 콘솔에서 props가 한 줄만 찍히나요?

0

43

1

렌더링 차단 리소스 javascript 실행에 관련해서 질문 있습니다.

0

43

2

데이터 로딩중 화면만 계속 나와요!!

0

48

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

74

2

깃 이메일이랑 비번이 필요하다고 하네요

0

30

1

02-04 layout.tsx 구조가 달라요

0

53

2

불변성을 지키며 수정 삭제를 할때도 Map이 유리한가요?

0

48

1

개인 프로젝트로 앱 개발해서 다운로드 1300 달성했는데 어느 정도 의미가 있을까요? (안드로이드 개발자)

0

65

1

22강 강의 영상 문의 드립니다.

0

46

2

20강 마무리작업에서

0

35

2

아래 위치에 동영상이 보이지 않습니다.

0

51

1

Vercel 사용법

0

71

2

강의자료가 않보입니다.

0

49

1

Promise 객체 강의 7분 27초 부분 질문입니다.

1

482

2