inflearn logo
강의

Course

Instructor

Node.js Textbook - From Basics to Project Practice

async/await

async/await 질문

390

wooyoung

11 asked

0

함수를 async로 선언하면 async 내부의 console.log와 같은 함수가 콜백 함수와 동기적으로 작동하는 건가요?

그럼 console.log를 콜백 함수가 콜스택에 쌓이기를 기다렸다가 실행한다고 이해해야 될까요?

mysql nodejs mongodb javascript

Answer 6

0

wooyoung

아아 이해했습니다. 감사합니다!

0

zerocho

3:30초 코드에서 위의 것은 의도한 바를 잘못 코딩한 예시이고요. 아래 것이 제대로 코딩한 예시입니다. 즉, 위의 코드는 틀린 코드고, 아래 코드가 제대로 된 코드입니다.

위의 코드를 올바르게 고친다면, console.log('다 찾았니') 이 부분을 .then((removedUser) => {}) 이 안에 넣어준게 의도한 바입니다.

일단 async function을 계속 헷갈려하시는 것 같은데요. async function은 그냥 promise를 보기 좋게 만들어준거라서 동작 순서 생각해보려면 promise 코드를 생각하시면 됩니다(await을 then이라고 생각하시면 편합니다). 따라서 findOne, update, remove, console.log는 task queue에 순서대로 삽입되지 않습니다. 하나씩 삽입되고요.

0

wooyoung

1)3:30~구간에서 Promise가 async/await으로 어떻게 바뀌는지 설명하신게 아닌가요?

그러면 같은 코드를 다른 문법으로 설명하시려던 의도가 아닌가요?

------- 이렇게 줄 그어서 설명하신것도요.

어떤 부분에서 완전히 다른 코드인건지 감이 잘 안잡히네요.. 보기에는 console.log 출력되는 순서만 달라지는 것 같은데.. 내부적으로는 잘 모르겠지만요

 

2)async/await을 사용하면 위에서 아래로 순차적으로 실행된다는 의미는

console.log("다 찾았니?") 이 부분이 user findOne/update/remove가 전부 실행된 이후에 마지막에 실행된다는 의미잖아요. js 입장에서는 콜백인 findOne과 update, remove가 언제 실행되는지를 알고 있어야 그 이후에 "다 찾았니?"라고 찍힐텐데 그렇게 되려면 console.log("다 찾았니?")라는 부분이 콜백과 동기적으로 실행이 되어야 콜백이 끝나고 난 후에 실행될 수 있지 않을까라는 의문이었습니다! 예를들어 async function안의 함수들(findOne, update, remove, console.log("다 찾았니?"))을 task queue에 순서대로 삽입하는 것과 같은 방식으로 말이죠.

0

zerocho

1:32의 코드와 async/await 설명시의 코드는 완전히 다른 코드입니다. 콜백이나 프로미스 패턴 시에는 저렇게 밑으로 쭉 내려쓸 수 없다는 것을 보여드린것이고요. 밑으로 내려쓰려면(위에서 아래 순으로) async/await 문법을 도입해야하는 것입니다.

async/await문법을 사용하면 위에서 아래로 순차적으로 실행됩니다. 다만 이게 비동기가 아니라는 뜻은 아닙니다.

0

wooyoung

그러면 동영상 1분 32초쯤에 console log가 먼저 실행된다 -> ES2017에서 async/await가 정식 스펙으로 등록되었다라고 하신건 어떤 의미에서 하신 말씀인가요?

저는 console.log가 코드 순서와 실행 순서가 다르게 작동하기 때문에 그 부분을 제어하기 위해서 async/await을 사용했다는 뜻으로 이해했는데 그런 의미가 아니었던건가요?

그냥 await을 붙여줌으로써 가독성을 높이고 이것은 비동기 함수이니 순서는 여전히 다를 수 있지만 보기는 더 쉽다 이런 의미인건가요??

0

zerocho

아뇨 전혀 동기적이지 않고 그대로 비동기입니다. 기존 비동기와 동작 방식도 같습니다. 그냥 겉보기로만 콜백이나 프로미스 패턴 없이 일자로 코드를 나열해주는 문법적 기능입니다.

실제 서비스에서도 cluster를 사용하나요?

1

313

2

캐싱에 관하여

0

278

3

salt를 실무에서 사용할때 항상 randomBytes로 만들어줘야 하나요?

0

345

1

게시물 올리기 오류

0

407

1

캐슁 이후 로그인창

0

266

1

kakao passport 질문있습니다.

0

493

3

global객체 공유 질문드립니다.

1

417

1

서버가 죽어버리네요

0

1047

8

포링키 문제..

0

234

2

커넥션 플래시 설치문제

0

216

2

익스프레스 제너레이터? 설치문제

0

2585

6

redis 질문입니다.

0

305

1

9장 세션을 DB에 저장시 리다이렉션 오류 발생

0

872

8

프레임워크 선택에 관하여 질문이 있습니다.

0

300

3

시퀄라이즈 질문입니다 ! !

0

588

1

리뉴얼 강의 12강 socket.io에서 req.session접근 관련 질문

0

922

6

oAuth 질문입니다.

0

356

3

GCP 질문입니다.

0

366

1

Passport 모듈 로그인 구현관련

0

720

6

카카오 로그인 관련 질문입니다!!

0

605

4

스스로 해보기 10-16 nunjuncks 질문있습니다

0

495

5

제로초님 HTTP 완벽가이드 추천해주신거 너무 잘 읽었습니다.

0

315

2

gif채팅방 nunjucks관련 질문입니다!

0

332

3

현영님 몽고db관련 질문입니다.

0

230

3