Javascript 如何对HttpClient.get返回的可观察对象实现副作用?
有人知道如何在angular的Javascript 如何对HttpClient.get返回的可观察对象实现副作用?,javascript,angular,angular5,observers,Javascript,Angular,Angular5,Observers,有人知道如何在angular的HttpClient.get方法返回的观测者上使用RxJSdo运算符吗 版本: 角度:5.2.1 rxjs:5.5.6 使用此版本的angular,我无法做到这一点: 从'@angular/common/http'导入{HttpClient}; ... 建造师( 私有http:HttpClient, ) { } ... this.http.get(url) .do(res=>console.log(JSON.stringify(res))) .share();
HttpClient.get
方法返回的观测者上使用RxJSdo
运算符吗
版本:
- 角度:5.2.1
- rxjs:5.5.6
从'@angular/common/http'导入{HttpClient};
...
建造师(
私有http:HttpClient,
) { }
...
this.http.get(url)
.do(res=>console.log(JSON.stringify(res)))
.share();
相反,我必须添加带有管道的新步骤。我可以用switchMap
、map
或share
来做,但我不知道如何用do
来做
我发现我可以从'rxjs/operator/do'导入{{u do}代码>,但当我尝试这样使用它时:
this.http.get(url)
.pipe(_do(res=>console.log(JSON.stringify(res)))
或者像这样:
const observable=this.http.get(url);
pipe(_do(observable,res=>console.log(JSON.stringify(res)}));
我得到一个错误:
[ts]类型为“void”的“this”上下文不可分配给类型为“Observable”的方法的“this”。
我在的帮助下修复了它
实际上,我的导入错误。此代码有效:
导入'rxjs/add/operator/do';
...
this.http.get(url)
.do(res=>console.log(JSON.stringify(res))
如文档所述,pipeabledo
与其他几个关键字一起被重命名为tap
。这样做是为了避免与保留的JavaScript关键字发生冲突
管道式操作器应作为
import { tap } from 'rxjs/operators/tap';
请注意,可管道操作符位于rxjs/operators/…
中,而rxjs/operator/…
导入用于修补可观察的.prototype
在某些角度版本中,没有任何问题会阻止使用do
操作符。只要开发人员了解修补操作符和可管道操作符之间存在某些差异,使得后者在某些情况下更可取,这两种导入样式都是受支持和有效的。下面将对它们进行说明:
do
被替换为。在上面找到任何真正好的文档似乎是一项任务。可能会很有用。@R.Richards感谢您的评论和链接。幸运的是,我已经解决了这个问题。但我很好奇,为什么会有这个do
函数?我毫不怀疑这是为了向后兼容。管道的优点是显而易见的我在文档中添加了d。这是一个品味问题。只要你不发布库并理解它们之间的区别,老式的操作符就可以了。