从 Nestjs 中的 observable grpc 服务获取数据,
Posted
技术标签:
【中文标题】从 Nestjs 中的 observable grpc 服务获取数据,【英文标题】:Get data from observable grpc service in nestjs, 【发布时间】:2020-10-10 15:29:48 【问题描述】:我想使用 gRPC 服务在我的微服务之间进行通信。但是当得到 Grpc 服务的响应时,在返回一个方法之前,我想做一些修改和功能。
示例项目:https://github.com/nestjs/nest/tree/master/sample/04-grpc
像这样:
@Get(':id')
getById(@Param('id') id: string): Observable<Hero>
const res: Observable<Hero> = this.heroService.findOne( id: +id );
console.log(res); res.name = res.name + 'modify string';
return res;
但在 console.log 中显示以下消息而不是原始响应。
Observable _isScalar: false, _subscribe: [Function]
【问题讨论】:
【参考方案1】:执行此操作的一种方法是将convert 您的Observable
发送到Promise
并等待此承诺。然后您可以修改并返回结果:
@Get(':id')
async getById(@Param('id') id: string): Promise<Hero>
const res:Hero = await this.heroService.findOne( id: +id ).toPromise();
res.name = res.name + 'modify string';
return res;
注意:如果您想坚持使用Observable
,请使用 bharat1226 的解决方案。
【讨论】:
【参考方案2】:您可以使用map 运算符来转换发出的值。
在下面的代码中,您将字符串modify string
添加到name
。
@Get(':id')
getById(@Param('id') id: string): Observable<Hero>
return this.heroService
.findOne( id: +id )
.pipe(map(item => ( ...item, name: `$item.namemodify string` )));
如果您想在 Observable 流中记录发出的值或执行副作用,可以使用 tap 运算符
@Get(':id')
getById(@Param('id') id: string): Observable<Hero>
return this.heroService
.findOne( id: +id )
.pipe(tap(item => console.log(item)));
【讨论】:
以上是关于从 Nestjs 中的 observable grpc 服务获取数据,的主要内容,如果未能解决你的问题,请参考以下文章
Nest JS - 为返回 Observable Axios 响应的函数编写 Jest 测试用例的问题