【问题标题】:Get data from observable grpc service in nestjs,从 Nestjs 中的 observable grpc 服务获取数据,
【发布时间】: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] }

【问题讨论】:

    标签: node.js angular grpc nestjs grpc-node


    【解决方案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.name}modify string` })));
        }
      

      如果您想在 Observable 流中记录发出的值或执行副作用,可以使用 tap 运算符

      @Get(':id')
        getById(@Param('id') id: string): Observable<Hero> {
          return this.heroService
            .findOne({ id: +id })
            .pipe(tap(item => console.log(item)));
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 2021-11-09
        • 2018-07-27
        • 2022-11-25
        • 2021-03-22
        • 1970-01-01
        相关资源
        最近更新 更多