抱歉标题不好,我真的不知道怎么说出来。
假设我在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再次。
但我想到了在执行帖子时需要完成的日志记录,消息传递和其他常规活动。
有没有办法实现这一点,或者我只是盲目地看到? :-(
这就是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的良好和错误值,而不会打扰它们。