从服务返回订阅 - 但是如何在服务中使用异步结果?

问题描述 投票:0回答:1

抱歉标题不好,我真的不知道怎么说出来。

假设我在Angular组件中的某处有一个服务调用,如:

this.myService.postObject(object).subscribe((serverData) => {
  console.log('Server Name:' + serverData.name)
});

当MyService看起来像这样时,这完美地工作:

postObject(dataObject: MyObject) {
  return this.http.post(`http://server/object`, dataObject);
}

但是,当我想对异步结果作出反应时,不仅仅是单独订阅,而且通常对所有调用也是如此 - 所以理想情况如下:

postObject(dataObject: MyObject) {
  return this.http.post(`http://server/object`, dataObject)
    .subscribe(
      (serverData) => {
        console.log('Server Name:' + serverData.name)
      })
}

这当然不起作用,因为我无法返回.subscribe,然后再次.subscribe再次。

但我想到了在执行帖子时需要完成的日志记录,消息传递和其他常规活动。

有没有办法实现这一点,或者我只是盲目地看到? :-(

javascript angular angular-httpclient
1个回答
2
投票

这就是tap的用途,tap不会修改你的返回observable,但可以处理像日志记录这样的事情。如果要修改返回的Obsertvable,请改用map

postObject(dataObject: MyObject) {
  return this.http.post(`http://server/object`, dataObject)
    .pipe(tap(serverData => {
        console.log('Server Name:' + serverData.name)
      }))
}

RxJS tap操作符(如“窃听”中所示)允许代码检查通过observable的良好和错误值,而不会打扰它们。

https://angular.io/guide/http

© www.soinside.com 2019 - 2024. All rights reserved.