inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

async와 await 로직을 사용해야 하는 기준을 잘 모르겠어요

해결된 질문

633

jhreplay.lee

작성한 질문수 8

0

비동기 로직을 호출만 하고 끝나는게 아니라 결과값을 활용해야할 때 async, await를 활용해야 한다고 이해하고 있는데요. 한가지 이해가 잘 가지 않는 부분이

Auth Service에서

async registerWithEmail(
    user: Pick<UsersModel, 'nickname' | 'email' | 'password'>,
  ) {
    const hash = await bcrypt.hash(user.password, HASH_ROUNDS);
    const newUser = await this.usersService.createUser({
      ...user,
      password: hash,
    });

    return this.loginUser(newUser);
  }

async 함수는 결국 Promise를 반환하니까

Auth Controller에서

@Post('/register/email')
  registerByEmail(
    @Body('nickname') nickname: string,
    @Body('email') email: string,
    @Body('password') password: string,
  ) {
    return this.authService.registerWithEmail({
      nickname,
      email,
      password,
    });
  }

async, await를 사용하지 않으면 제대로 동작하지 않을 줄 알았는데 비동기 호출의 결과인 token이 잘 반환되더라구요. 혹시 이유를 알 수 있을까요?

async, await를 판단하는 강사님 만의 기준이 혹시 있으신지, 그리고 굳이 async, await가 필요 없는 곳에도 사용하게되면 성능의 차이가 생기는지도 궁금합니다.

javascript typescript rest-api nestjs backend

답변 2

0

jhreplay.lee

registerByEmail에서도 registerWithEmail의 결과를 기다려야 한다고 생각했는데 기다리지 않아도 의도한 대로 token이 잘 반환되는 점이 궁금했습니다.

1

코드팩토리

안녕하세요! '기다린다'는 말이 조금 애매합니다. 왜냐면 이미 말씀드린대로 await를 써도, await를 쓰지 않아도 결국 반환 타입은 Promise입니다. 말씀하신대로 Promise를 '기다려'서 Promise를 벗겨내고 내부의 타입을 받아내는 역할은 registerByEmail() 함수를 실행하는 다른 함수입니다. registerByEmail()에서 registerWithEmail()에 await를 입력하냐 안하냐는 해당 함수가 Promise 타입을 반환하냐에 어떤한 영향도 주지 않습니다. registerWithEmail() 함수가 애초에 Promise 타입을 반환하게 돼있기 때문입니다.

0

jhreplay.lee

아, registerByEmail에서는 Promise를 리턴하면 안된다고 생각했는데 강사님 설명 덕분에 이제 잘 이해했습니다!

0

코드팩토리

안녕하세요!

'제대로 작동하지 않을 것 같았다'가 어떤 말씀이실까요?

JS/TS 강의에서 알려드린 것처럼 async 함수는 Promise 타입을 반환하게 됩니다.

이건 await를 사용하든 안하든 똑같습니다.

async/await를 사용하고 안하고의 '주관적 기준'은 존재하지 않습니다.

Promise를 '기다려야하면' await를 사용해야하고 아니면 await를 사용하지 않으셔도 됩니다.

감사합니다!

cascade 질문

0

40

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

49

1

process.env port key 에러

0

47

1

추상화

0

50

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

101

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

57

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

72

1

app.controller app.service 는 지워도되나요?

0

70

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

79

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

68

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

103

2

socket connect 오류

0

98

2

강의를 들으면서 궁금한 점

0

97

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

60

2

커리큘럼 질문

0

100

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

351

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

78

2

User 데코레이터 버그 수정 전달드립니다.

0

67

1

git 주소 부탁드립니다.

0

113

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

85

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

148

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2