我想使用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] }
一种方法是将您的observable
转换为promise
,然后等待这个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;
}
您可以使用map运算符来转换发出的值。
在下面的代码中,您正在向name
添加字符串modify string
。
@Get(':id')
getById(@Param('id') id: string): Observable<Hero> {
return this.heroService
.findOne({ id: +id })
.pipe(map(item => ({ ...item, name: `${item.name}modify string` })));
}
如果任何时候,您想记录发出的值或在可观察到的流中执行副作用,可以使用tap运算符
@Get(':id')
getById(@Param('id') id: string): Observable<Hero> {
return this.heroService
.findOne({ id: +id })
.pipe(tap(item => console.log(item)));
}