아래 공식문서 페이지를 참조하여 글을 작성했습니다.
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac
docs.nestjs.com
@Injectable()
export class TestService {
constructor(private readonly httpService: HttpService) {}
//1번해설
usebasicsObservable(): Observable<AxiosResponse<T>> {
return this.httpService.get(URL);
}
//2번해설
useAxiosForPromise(): Promise<AxiosResponse<T>> {
return this.httpService.axiosRef.post(URL, bodyData);
}
//3번해설
useValueFromForPromise(): Promise<T> {
return await firstValueFrom(
this.httpService.post(URL, bodyData)
);
}
}
1번 해설
return this.httpService.get(URL);
- HttpService 메서드는 기본적으로 리턴값이 Observable 객체로 넘어옵니다.
Promise 타입으로 변환해서 받는 방법으로는 2번, 3번해설을 참고하면 됩니다.
2번 해설
return this.httpService.axiosRef.post(URL, bodyData);
- 'axiosRef'는 Axios 인스턴스 인터페이스로 리턴값을 Promise 객체로 받습니다.
3번 해설
return await firstValueFrom(this.httpService.post(URL, bodyData));
- rxjs의 'firstValueFrom' 또는 'lastValueFrom'을 사용해서 Promise 객체로 받을 수 있습니다.
firstValueFrom
- Observable 구독하고 첫번째 값이 도착시 즉시 Promise 반환. 구독 종료.
lastValueFrom
- Observable 구독하고 완료될 때까지 기다린 후 마지막 값을 Promise 반환.
응답값을 받아보는 방식에서의 차이점이 있는 것 같습니다.
firstValueFrom(
this.httpService.get(URL)
).then(value => {
// value 값 처리
});
value = await lastValueFrom(
this.httpService.get(URL)
);
// value 값 처리
아래 링크를 참고해서 작성했습니다.
https://rxjs.dev/api/index/function/firstValueFrom
https://rxjs.dev/api/index/function/lastValueFrom
둘다 사용해봤는데 2번과 3번 방법을 어느 상황에서 적절하게 사용해야하는지는 아직 잘 모르겠습니다.
rxjs 라이브러리가 Nest의 내장 패키지로 들어있어서 공식문서 방법대로 쓰긴했지만 이젠 좀더 이해를 하면서 사용해보려고 합니다!
'BackEnd > Node.js' 카테고리의 다른 글
[Node.js] Socket.IO 사용해서 채팅방 구현하기 (0) | 2022.09.15 |
---|---|
[Node.js] 모듈 exports하고 imports해서 다른모듈 사용하기 (0) | 2022.07.01 |